簡體   English   中英

JBoss resteasy-定制Jackson提供商

[英]JBoss resteasy - Custom Jackson provider

我在Spring引導應用程序中使用JBoss resteasy。 如下配置了我的自定義JasonProvider並使用com.fasterxml.jackson。

    @Provider
    @Priority(value=1)
    @Consumes({ "application/*+json", "text/json" })
    @Produces({ "application/*+json", "text/json" })
    public class JsonProvider extends JacksonJsonProvider {

      public static final PeriodFormatter STANDARD_ISO_PERIOD_FORMAT = ISOPeriodFormat.standard();

        public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper().configure(WRITE_DATES_AS_TIMESTAMPS, false).configure(FAIL_ON_UNKNOWN_PROPERTIES, false)
                    .setDateFormat(ISO8601_WITH_MILLIS);

    static {
            final SimpleModule module = new SimpleModule("JsonProviderModule", new Version(1, 0, 0, null, null, null));
            module.addSerializer(Date.class, new DateSerializer());
            module.addDeserializer(Date.class, new DateDeserializer());

            OBJECT_MAPPER.registerModule(module);
        }

   public JsonProvider() {
        super(OBJECT_MAPPER);
    }
}

在我的客戶代碼中

    final Client client = factory.getClient();
    client.register(jsonProvider);

雖然jsonProvider已注冊,但是當我打電話時,它沒有調用我的jsonProvider。

引起原因:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:無法識別的字段......在com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:26)〜[jackson- com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:1583)的com.fasterxml.jackson.databind.ObjectReader.bind(ObjectReader.java:1583)〜com的[jackson-databind-2.8.9.jar:2.8.9]。 fastxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:964)〜[jackson-databind-2.8.9.jar:2.8.9] at org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider.readFrom(ResteasyJackson2Provider .java:134)〜[resteasy-jackson2-provider-3.1.4.Final.jar:3.1.4.Final] at org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.readFrom(AbstractReaderInterceptorContext.java:66) 〜[resteasy-jaxrs-3.1.4.Final.jar:3.1.4.Final]在org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:56)〜[resteasy-jaxrs-3.1 .4.Final.jar:3.1.4.Fi nal] at org.jboss.resteasy.client.jaxrs.internal.ClientResponse.readFrom(ClientResponse.java:266)〜[resteasy-client-3.1.4.Final.jar:3.1.4.Final] ... 29個常見框架省略

過去,它與resteasy 3.0.14.Final版本一起正常工作。

我最近升級到3.1.4.Final,還有其他幾個Jar。 不知道為什么不采用最新版本的自定義JsonProvider。

還有其他注冊方法嗎?

相關pom整體,

<dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jackson2-provider</artifactId>
            <version>3.1.4.Final</version>
        </dependency>

<dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-validator-provider-11</artifactId>
            <version>3.1.4.Final</version>
        </dependency>

是否還有其他Pom沖突需要驗證...

謝謝

添加“ application / json”以及其他注釋解決了該問題。

@Provider
@Consumes({ "application/json","application/*+json", "text/json" })
@Produces({ "application/json","application/*+json", "text/json" })
public class JsonProvider extends JacksonJsonProvider {

Spring根據比賽和權重確定優先級。 由於默認JsonProvider在版本3.1.0中添加了注釋“ application / json”,因此默認提供程序具有優先權,因此向自定義JsonProvider添加“ application / json”解決了該問題。

暫無
暫無

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

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