2010-03-18 51 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;