首页 文章

JBoss resteasy - Custom Jackson提供商

提问于
浏览
0

我在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 -databind-2.8.9.jar:2.8.9] at com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:1583)〜[jackson-databind-2.8.9.jar:2.8.9] at com .fasterxml.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] 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 . 最终]在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 entires,

<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冲突需要验证......

谢谢

1 回答

  • 0

    添加“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”,默认提供程序优先,因此将“application / json”添加到自定义JsonProvider修复了该问题 .

相关问题