我正在使用Jersey爲外部世界提供Java REST服務。我提供了一些採用JSON的函數,我將Jackson框架與球衣結合使用,將它們轉換爲POJO。ExceptionMapper的澤西島/傑克遜異常問題
我有問題,如果錯誤的傑克遜格式發送到服務器,答案(http響應的內容)是傑克遜特定的異常說明。如果我有一個屬性「姓」一個POJO和JSON字符串發送「sursname」服務器,我得到:
Unrecognized field "sursname" (Class XY), not marked as ignorable at [Source: [email protected]; line: 1, column: 49] (through reference chain: XY["sursname"])
那是相當確定的,但我想有我自己的響應內容,例如我自己的錯誤代碼。我已經寫了一個自定義的ExceptionMapper,它應該映射所有的Throwables。
@Provider
public class WebserviceExceptionMapper implements ExceptionMapper<Throwable> {
@Override
public Response toResponse(Exception e) {
e.printStackTrace();
return Response.status(400).entity("{\"errorcode\":\"CRITICAL_ERROR\"}").type(MediaType.APPLICATION_JSON).build();
}
}
似乎傑克遜異常是在我的webservice方法被調用之前拋出的,所以我沒有機會映射它?
有沒有人有想法?非常感謝,對不起我的英語;)
我剛剛花了相當長的一段時間這個問題,看了很多關於它的線程,多提exceptionmappers。最後偶然發現了你的答案,這是我發現的唯一一個能夠正確解釋問題的人,爲什麼exceptionmappers不會工作並且有一個簡單的解決方案。謝謝!應該被市場接受爲答案。 – patman 2015-06-15 14:31:38
有史以來最佳答案!只註冊JacksonJsonProvider.class適用於我,但不適用於JacksonJaxbJsonProvider.class。這真的應該是被接受的答案。 – wolf97084 2016-04-07 20:08:57