2017-10-06 136 views
0

錯誤: org.glassfish.jersey.message.internal.WriterInterceptorExecutor $ TerminalWriterInterceptor aroundWriteToSEVERE:MessageBodyWriter not found for media type = application/vnd.xyzcompany.v1 + json,type = class model.OrderStatus,genericType = class model.OrderStatu如何解決MessageBodyWriter未找到?

OrderStatus是一個模型類。

嘗試返回類OrderStatus的Object時遇到此問題。

造成這種情況的主要原因是媒體類型,當我試圖使用應用/ JSON它的工作,但需要自定義介質類型 喜歡這樣做:應用/ vnd.xyzcompany.v1 + JSON

附加信息: @Produces和@Consumes使用相同的媒體類型,OrderStatus類在請求的響應中定義。

無論我在哪裏閱讀大多數發現,自定義MIME /媒體類型需要註冊,但不知道如何註冊和實施。

任何人都可以幫助解決此問題。

感謝提前:)

回答

0

使用定製媒體/ mime類型和序列化/根據新的媒體類型反序列化接收或發送的對象。

它只需要一個帶有「@Provider」註釋和一個「@Produces」的類。生產批註將寫爲:@Produces({「application/customType.v1 + json」,「application/json」})。

使用具有對象映射器序列化和反序列化的構造函數/方法。

注意:請將此類保留在所有API類所在的包中。

例如代碼:

@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); 
    } 
} 
相關問題