我的项目有一个休息界面。 对于一个类,我有一个POST方法,你可以发布一个xml,我返回一个自定义响应,如:
<customResponse>Invalid email</customResponse>
如果发布的xml中的电子邮件不正确+我为不同情况定义的其他自定义消息。
对于所有这些,HTTP STATUS会自动置于200(OK)。 有没有办法改变它?
Ps:我知道我可以抛出一个像以下的网络应用程序:
throw new WebApplicationException(Response.Status.BAD_REQUEST);
但在这种情况下我的自定义回复不再包括在内。
所以我只想将自定义错误+ 400作为http响应返回。
提前致谢。
评论后更新: 我的方法是:
@POST
@Path("{membershipExternalId}")
@Consumes(MediaType.APPLICATION_XML)
@Produces("application/xml")
public CustomResponse invite(){ //code}
你看我回复了我的CUSTOM RESPONSE。如果我会返回简单的响应,我可以设置状态,但在这种情况下,我看不到任何方式。
答案 0 :(得分:8)
找到解决方案:
将返回类型作为Response放入方法:
@POST
@Path("{membershipExternalId}")
@Consumes(MediaType.APPLICATION_XML)
@Produces("application/xml")
public Response invite(){ //code
if (fail())
return Response.status(400).entity(customResponse).build();
}
Response.status(400).entity(customResponse)可以解决问题。当build()时,它会转换您的自定义响应xml =&gt;
HTTP/1.1 400 Bad Request
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181439)/JBossWeb-2.0
Set-Cookie: JSESSIONID=1C72921619A6B32BC1166B3567A39ADA; Path=/
Content-Type: application/xml
Content-Length: 140
Date: Thu, 18 Mar 2010 12:15:15 GMT
Connection: close
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><customResponse><message>Invalid email</message></customResponse>
答案 1 :(得分:2)
HttpServletResponse
{{1}}应该可以解决问题。
答案 2 :(得分:0)
这是标记的Java,但我不认识Response.Status.BAD_REQUEST。
对于Java,只需在HttpServletResponse对象上调用setStatus。
对于.NET,它看起来像这样:
HttpContext.Current.Response.StatusCode = xxx;