POJO'ya eşlenen bir JSON'u kullanan aşağıdaki kaynağa sahibim.Jersey için özel ExceptionMapper geçersiz JSON girdisi için çalışmıyor
@Path("example")
public class ExampleResource {
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response addThesis(MyObject myObject) {
return Response.ok().entity("Test").build();
}
}
İşte POJO sınıf var: her şey iyi çalışır:
public class MyObject {
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
ben beden { "Test başlığı" "title"} ile bir POST isteği göndermek
. Yanıt, beklendiği gibi Test'dur. Ben { "titlee": "Test başlığı"} isteği değiştirmek Ancak, sunucusu bu cevaplıyor:Tanınmayan alan "titlee" (sınıf com.my.package.MyObject), işaretlenmemiş [Kaynak: org.glassfish.jersey.me[email protected]6dc6a46a adresindeki no'lu (bilinen bir özellik: "başlık"]); çizgi 2, kolon: 11] (referans zinciri üzerinden: com.my.package.MyObject [ "titlee"])
Açıkçası bu atılır ve Jersey tarafından döndürülen bir istisnadır. Bu özel durumu nasıl engelleyebilir ve özel durum kodu ve iletisini nasıl döndürebilirim?
@Provider
public class MyJsonExceptionMapper implements ExceptionMapper<JsonProcessingException> {
public Response toResponse(JsonProcessingException e) {
return Response.status(400).entity("JSON Processing Error").build();
}
}
Maalesef yanıt aynı kalır: Şimdiye kadar denedim ne kendi ExceptionMapper uygulamaktır. Özel bir özel durum için bir ExceptionMapper uyguladığınızda ve kaynak yönteminde karşılık gelen özel durumu attığımda, her şey iyi çalışıyor. Bunun, JsonProcessingException için kendi özelliğimi geçersiz kılan varsayılan ExceptionMapper ile ilgisi olduğunu varsayalım. Sonra genel bir eşleştirici ("ExceptionMapper uygular") oluşturmaya çalıştım, ama yine başarı yok.
Her yerde tam anlamıyla baktım ve ResourceConfig'i genişletmek ve eşleştiricimi kaydetme dahil birçok şeyi denedim, ancak hiçbir şey şu ana kadar işe yaramadı.
Sorunu daraltmaya yardımcı olabilecek bazı daha fazla bilgi: Grizzly2'yi Fat JAR olarak dağıttığım HTTP sunucusu olarak kullanıyorum.
benim pom.xml bağımlılığı kısmı aşağıdaki gibidir:
<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>
Herhangi bir tavsiye çok takdir edilmektedir.
, varsayılan olanları geçersiz kılar. Onları nasıl devre dışı bırakacağımı tam olarak bilmiyorum. –
"Throwable" için bir eşleştirici uygulamak, geçersiz kılmayı/varolan eşleyicileri geçersiz kılar. Ama işe yaramıyor. ResourceConfig'teki 'ExceptionMapper' açıklığını yeniden kaydetmiyor. –
BadZen
(Ayrıca docs olarak 'ExtendedExceptionMapper' uygulanması ... çalışmıyor da önermek) – BadZen