自定义响应 + HTTP状态码?

4
我有一个项目的rest接口。其中一个类有一个POST方法,您可以在该方法中发布XML,并返回一个自定义响应,例如: <customResponse>Invalid email</customResponse> 如果发布的XML中的电子邮件不正确,则会返回此响应,还有其他我为不同情况定义的自定义消息。
对于所有这些情况,HTTP状态都会自动设置为200(OK)。是否有任何方法可以更改它?
附注:我知道可以像这样抛出Web应用程序:
throw new WebApplicationException(Response.Status.BAD_REQUEST);

但在这种情况下,我的自定义响应不再包括在内。 所以我只想返回我的自定义错误+400作为http响应。 提前致谢。
评论后更新: 我的方法是:
 @POST
 @Path("{membershipExternalId}")
 @Consumes(MediaType.APPLICATION_XML)
 @Produces("application/xml")
 public CustomResponse invite(){ //code}

您看到我返回了自定义响应。如果我返回简单的响应,我可以设置状态,但在这种情况下我看不到任何方法。

3个回答

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转换成……

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>

更易于非网络专家阅读的表述:javax.ws.rs.core.Response.Status.BAD_REQUEST 是代表状态 400 的常量。 - Christophe Roussy

2

0

这段代码标记为Java,但我不认识Response.Status.BAD_REQUEST。

对于Java,只需在HttpServletResponse对象上调用setStatus方法即可。

对于.NET,代码如下:

HttpContext.Current.Response.StatusCode = xxx;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接