工作,我有以下的資源,消耗了JSON映射到一個POJO。定製ExceptionMapper澤西島不是無效的JSON輸入
@Path("example")
public class ExampleResource {
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response addThesis(MyObject myObject) {
return Response.ok().entity("Test").build();
}
}
這裏的POJO類:
public class MyObject {
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
當我送與身體{ 「稱號」: 「測試題」} POST請求一切工作正常。響應是測試,符合市場預期。然而,當我改變請求{「titlee」:「測試題」}服務器與此回覆:
無法識別的領域「titlee」(類com.my.package.MyObject),沒有標明爲可忽略(一種已知的屬性: 「標題」]) 在[來源:org.glassfish.jersey.me[email protected]6dc6a46a;行:2,柱:11](通過參考鏈:com.my.package.MyObject [ 「titlee」])
顯然,這是拋出由新澤西返回異常。我如何攔截這個異常並返回一個自定義的狀態碼和消息?
我到目前爲止已經試過是實現我自己ExceptionMapper:
@Provider
public class MyJsonExceptionMapper implements ExceptionMapper<JsonProcessingException> {
public Response toResponse(JsonProcessingException e) {
return Response.status(400).entity("JSON Processing Error").build();
}
}
不幸的是,響應保持不變。當我爲自定義異常實現一個ExceptionMapper並在資源方法中拋出相應的異常時,一切正常。我認爲這與JsonProcessingException的默認ExceptionMapper重寫我自己的。然後我試圖創建一個通用映射器(「實現ExceptionMapper」),但再次沒有成功。
我看着幾乎無處不在,並嘗試了很多事情,包括擴大ResourceConfig和註冊我的映射,但至今沒有奏效。
一些詳細信息,這可能有助於縮小問題了下來:我使用Grizzly2作爲我部署作爲脂肪JAR HTTP服務器。
我的pom.xml的依賴部分看起來是這樣的:
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.24</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-grizzly2-http</artifactId>
<version>2.24</version>
</dependency>
</dependencies>
任何意見表示高度讚賞。
從我記得我認爲實現了JsonMappingException和JsonParseException一個映射,則應該重寫默認的。我不太確定如何禁用它們。 –
爲'Throwable'實現映射器應該覆蓋/所有/現有的映射器。但它似乎並不奏效。在ResourceConfig中也不會調用'ExceptionMapper'顯式。 –
BadZen
(也實現'ExtendedExceptionMapper'的文檔也建議不工作...) – BadZen