2014-02-27 25 views
0

我正在使用customService bean开发RESservices。我注意到的一件事是,由于某种原因,当我不使用responsewriter对象时,只使用engine.getHttpResponse()。setStatus(404)(例如)设置响应状态。标头设置正确(404),但仍有一些html生成。当写入程序不包含数据时,RESTService返回HTML

我已经尝试将视图标记(xpage)上的呈现属性设置为false,但似乎没有办法。是否有一些关于如何使用CustomServiceBean并不返回任何数据的文档?

+1

产生什么HTML?你能显示代码(XPage)吗? –

回答

2

设置状态创建HTML蚂蚁错误状态是一个好方法,因此API很容易处理。但是,您想考虑:

  • 将内容类型设置为实际将呈现的内容类型(如果您有结果)。如果您未设置response.contenttype,则默认为HTML
  • 404适用于导航/网址。由于您的XPage呈现结果,请求找到了有效的URL。基于用户和/或参数没有结果,因此不是4xx类错误,而是5xx。选择其中一个。
  • 测试使用wget或卷曲时,这样你就可以确保浏览器不会做HTML

让我们知道如何去

+0

设置内容类型确实是正确的答案。我所做的是创建一个负责输出格式的类。所以当客户端请求json时,我会调用一个不同的'输出处理程序'。如果noe内容类型被请求,json将是默认的。 添加内容类型标题后,我的问题得到解决,但偶尔铬仍然认为它的HTML。现在我认为这是Chrome中的一个bug,因为Restclient正在接收纯数据和100%的json。 – jjtbsomhorst

1

我认为返回一个404响应会导致总是HTML数据,因为它通常会给出错误消息等。 如果您不想回应任何数据只是返回一个空的JSON对象 - 因为我认为您返回JSON时你有数据,对吧?

+0

mmm,某种程度上感觉不对。当服务返回404时,意味着找不到找到的东西。返回一个空的json对象可能会导致客户认为还有一些东西可以解析,事实并非如此。 我已经玩了一下httpservletresponse对象,它似乎在使用restclient项目(http://xpag.es/?1CCA)时实际上没有创建响应,但浏览器只是添加了默认的html它在响应头没有被设置时。 – jjtbsomhorst

+0

所以也许这是浏览器端的“问题”。在IE * grml * –

+0

中想到这种愚蠢的“友好的错误信息”好吧,现在我知道你的意思了:该服务提供了一个空的响应,导致浏览器将其解释为HTML。因此,您可能会将此问题传递给@pdhannan –

1

不要设置404种状态,这种情况下设置为null,像404分的手段为

+0

这不会提供问题的答案。要批评或要求作者澄清,在他们的帖子下留下评论 - 你总是可以评论你自己的帖子,一旦你有足够的[声誉](http://stackoverflow.com/help/whats-reputation),你会能够[评论任何帖子](http://stackoverflow.com/help/privileges/comment)。 – mah

+2

@mah - 实际上,这**是**的答案。如果您想对其准确性提出异议,请这样做 - 但请不要发表形式评论,这表明您没有真正阅读您正在评论的问题和答案。 –

+0

@ChrisStratton我没有发表评论手动,甚至没有意识到它已经完成 - 必须是采取审查行动的结果。如果我错了这个帖子是一个答案,那就这样吧(这就是为什么行动需要投票,我们都有能力让它错误)。 – mah

相关问题