簡體   English   中英

如何解決MessageBodyWriter找不到?

[英]How to resolve MessageBodyWriter not found?

錯誤:org.glassfish.jersey.message.internal.WriterInterceptorExecutor $ TerminalWriterInterceptor aroundWriteToSEVERE:找不到針對媒體type = application / vnd.xyzcompany.v1 + json,type = class model.OrderStatus,genericType = class model.OrderStatu的MessageBodyWriter

OrderStatus是模型類。

嘗試返回類OrderStatus的對象時面臨此問題。

造成這種情況的主要原因是媒體類型,當我使用application / json嘗試它時它起作用了,但是需要使用自定義媒體類型來做到這一點,例如: application / vnd.xyzcompany.v1 + json

額外信息:@Produces和@Consumes使用相同的媒體類型,並且在請求的響應中定義了OrderStatus類。

我最常閱讀的地方發現,自定義的mime /媒體類型需要注冊,但不知道如何注冊和實現。

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

提前致謝 :)

使用自定義媒體/ 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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM