[英]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.