@Provider
public class JerseyExceptionMapper implements ExceptionMapper<JerseyException> {
@Override
public Response toResponse(JerseyException jerseyException) {
return Response.status(jerseyException.getErrorCode()).
entity(jerseyException.getJsonResponseObj()).
type(MediaType.APPLICATION_JSON).
build();
}
}
碼錯誤頁面,當你在web.xml
使用<error-page>
組件的上方有不想要的結果。例如,如果我的Response.status
設置爲400,而我的error-page
組件定義的<error-code>
爲400,則Web服務器將將請求重定向到web.xml
中定義的位置。忽略的web.xml與新澤西州的ExceptionMapper
這顯然不是我想要的REST請求。我在StackOverflow上讀到另一篇文章,說請求被轉移到error-page
的原因是因爲設置了HttpServletResponse.sendError(400)
。該帖子說,如果你設置HttpServletResponse.setStatus(400)
,error-page
將被忽略。
如果這是真的,我沒有看到它有什麼幫助,因爲我沒有實現澤西島代碼。我看到的選項是調查Response類源代碼,並可能重新實現狀態方法或其他澤西島代碼。這裏有一個簡單的選項或我錯過了什麼嗎?
從本質上講,我的問題是:由於我使用的是新澤西州的休息和我使用的錯誤頁面,我web.xml
,我怎麼可以使用上面的代碼,而忽略的爲error-page
僅新澤西州代碼?任何其他導致HTTP錯誤的代碼都應該轉到error-page
。或者是否有另一種解決方案不涉及error-page
,但將與我想要的完全相同?
哪個servlet容器是你使用?這可能與https://java.net/jira/browse/JERSEY-2673 –
有關我無法重現此問題(glassfish 4球衣2.13)。 1)什麼是'JerseyException'? 2)您是否檢查過映射器是否被調用? 3)爲了完成這個工作,我只是做了一個'JerseyException'類擴展'WebApplicationException',並從資源方法中拋出它。 4)如果3.不能爲你工作,你能否提供更多的信息來重現這一點,比如環境,Jersey版本,服務器,哪裏出現異常。 –