2017-10-06 4 views
0

Fehler: org.glassfish.jersey.message.internal.WriterInterceptorExecutor $ TerminalWriterInterceptor aroundWriteToSEVERE: MessageBodyWriter nicht für Medien type = application/vnd.xyzcompany.v1 + json, type = Klasse model.OrderStatus, genericType = class model.OrderStatu gefundenWie löst man MessageBodyWriter nicht gefunden?

OrderStatus ist eine Modellklasse.

Mit diesem Problem konfrontiert, wenn Sie versuchen, das Objekt der Klasse OrderStatus zurückzugeben.

Der Hauptgrund dafür ist, Medientyp, als ich versuchte, es mit application/json es funktionierte, aber müssen es mit benutzerdefinierten Medientyp tun wie: application/vnd.xyzcompany.v1 + json

Zusätzliche Informationen: @Produces und @Consumes werden mit demselben Medientyp verwendet und die OrderStatus-Klasse wird in der Antwort der Anfrage definiert.

Wo immer ich am meisten gelesen, dass benutzerdefinierte Mime/Media-Typ registriert werden müssen, aber nicht wissen, wie zu registrieren und zu implementieren.

Kann jemand helfen, dieses Problem zu lösen. Objekt nach dem neuen Medientyp

Dank im Voraus :)

Antwort

0

Verwenden von benutzerdefinierten Medien/MIME-Typ und Serialisieren/Deserialisieren die empfangen oder gesendet.

Es erfordert nur eine Klasse mit "@Provider" Annotation und einem "@Produces". Die erzeugte Annotation wird wie folgt geschrieben: @Products ({"application/customType.v1 + json", "application/json"}).

Mit einem Konstruktor/einer Methode mit Serialisierung und Deserialisierung von Object Mapper.

HINWEIS: Behalten Sie diese Klasse in dem Paket bei, in dem sich alle API-Klassen befinden.

Beispielcode:

@Provider 
@Produces({MediaType.APPLICATION_JSON, "application/customType.v1+json"}) 
public class JacksonJsonProvider extends JacksonJaxbJsonProvider { 

    public JacksonJsonProvider() { 

     ObjectMapper objectMapper = new ObjectMapper() 
      .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) 
      .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) 
      .registerModule(new JodaModule()) 
      .setDateFormat(new RFC3339DateFormat()); 

     setMapper(objectMapper); 
    } 
} 
Verwandte Themen