4

我的项目有一个休息界面。对于一个类,我有一个 POST 方法,您可以在其中发布一个 xml,然后我返回一个自定义响应,例如:

<customResponse>Invalid email</customResponse>

如果来自已发布的 xml 的电子邮件不正确 + 我为不同情况定义的其他自定义消息。

对于所有这些,HTTP STATUS 自动设置为 200(OK)。有没有办法改变它?

Ps:我知道我可以抛出一个 Web 应用程序,例如:

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。如果我会返回简单的响应,我可以设置状态,但在这种情况下,我看不到任何方法。

4

3 回答 3

8

找到了解决方案:

将返回类型作为方法的响应:

     @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>
于 2010-03-18T12:18:23.420 回答
2

setStatus或者应该做sendErrorHttpServletResponse伎俩。

于 2010-03-18T11:44:54.730 回答
0

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

对于 Java,只需在 HttpServletResponse 对象上调用 setStatus。

对于 .NET,它看起来像这样:

HttpContext.Current.Response.StatusCode = xxx;

于 2010-03-18T11:47:43.560 回答