我在我的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。最终] at org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:56)〜[resteasy- jaxrs-3.1.4.Final.jar:3.1.4.Final] 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”解决了该问题。