【问题标题】:Custom Response + HTTP status?自定义响应 + HTTP 状态?
【发布时间】:2010-03-18 11:42:06
【问题描述】:

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

<customResponse>Invalid email</customResponse>

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

对于所有这些,HTTP STATUS 自动设置为 200(OK)。 有什么办法可以改变吗?

Ps:我知道我可以抛出这样的 Web 应用程序:

throw new WebApplicationException(Response.Status.BAD_REQUEST);

但在这种情况下,我的自定义响应不再包括在内。

所以我只想将我的自定义错误 + 400 作为 http 响应返回。

提前致谢。

UPDATE 在 cmets 之后: 我的方法是:

 @POST
 @Path("{membershipExternalId}")
 @Consumes(MediaType.APPLICATION_XML)
 @Produces("application/xml")
 public CustomResponse invite(){ //code}

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

【问题讨论】:

    标签: java rest jaxb jax-rs


    【解决方案1】:

    找到解决方案:

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

         @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 的常量
    【解决方案2】:

    HttpServletResponse 上的setStatussendError 应该可以解决问题。

    【讨论】:

      【解决方案3】:

      这是标记为 Java,但我无法识别 Response.Status.BAD_REQUEST。

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

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

      HttpContext.Current.Response.StatusCode = xxx;

      【讨论】:

        猜你喜欢
        • 2011-09-25
        • 2019-09-25
        • 2019-11-01
        • 1970-01-01
        • 2023-03-21
        • 2015-09-10
        • 2016-02-05
        • 2019-01-07
        • 2016-08-17
        相关资源
        最近更新 更多