2013-04-23 35 views
1

我有com.sun.jersey.api.json.POJOMappingFeature設置爲true,它對HTTP 200響應正常工作。針對HTTP錯誤的POJOMappingFeature?

但是,當我的應用程序返回一個錯誤時,它顯示帶有錯誤標題的文本/ html響應。

即使我創建我的自定義異常(在ContainerRequestFilter)是這樣的:

throw new WebApplicationException(
    Response.status(Response.Status.FORBIDDEN) 
     .type(MediaType.APPLICATION_JSON) 
     .build() 
); 

它仍然顯示普通text/html的403錯誤。

回答

2

你應該嘗試的ExceptionMapper從澤西島:

首先,您的自定義異常:

public class UnauthorizedException extends RuntimeException { 
    public UnauthorizedException() {} 
} 

然後,你的實體,您要發送回:

@XmlRootElement 
public class ErrorMessage{ 
    @XmlElement 
    private String message; 

    public ErrorMessage(String message){ 
    this.message = message; 
    } 
} 

最後,魔術踢在:)

@Provider 
public class UnauthorizedExceptionMapper implements ExceptionMapper<UnauthorizedException>{ 

    @Override 
    public Response toResponse(UnauthorizedException exception) { 
    return Response.status(Response.Status.UNAUTHORIZED) 
        .entity(new ErrorMessage("Not Authorized")) 
        .build(); 
    } 
} 

現在,JSON實體應返回,當你

throw new UnauthorizedException(); 

問候

+0

大,謝謝! entity()調用是關鍵,沒有它的media()類型不受尊重。 – 2013-05-01 16:04:22