2010-03-18 56 views
3

我的项目有一个休息界面。 为一类,我有一个POST方法,在这里你可以发布一个XML和我回像定制响应自定义响应+ HTTP状态?

<customResponse>Invalid email</customResponse>

如果从中张贴的XML,电子邮件是不正确的+其他自定义消息我已经定义了不同的情况。

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

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

throw new WebApplicationException(Response.Status.BAD_REQUEST); 

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

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

在此先感谢。

UPDATE意见后: 我的方法是:

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

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

回答

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)就可以了。当构建(),它会转换成您的自定义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> 
+0

有点非网络专家更加易读:'javax.ws.rs.core.Response.Status.BAD_REQUEST'它是状态的持续400 –

0

这是标签Java,但我不认识Response.Status.BAD_REQUEST。

对于Java只需调用HttpServletResponse对象上的setStatus即可。

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

HttpContext.Current.Response.StatusCode = XXX;