REST WebサービスをJersey2.6で実装しています。
JSONサポート用にJacksonプロバイダーを登録するのに問題があります。jeresyのドキュメントに従って実装しました( https://jersey.Java.net/documentation/2.6/user-guide.html#json.jackson )。
参照: http://blog.dejavu.sk/2013/11/19/registering-resources-and-providers-in-jersey-2/
何らかの理由でJackson JSONプロバイダーが登録されていません。何か不足していますか?
Jersey 2.9までは、その機能は自動検出されませんでした。 (1)JacksonFeature
をApplication/ResourceConfig
サブクラスに明示的に登録するか、(2)スキャンするパッケージのweb.xmlにJacksonパッケージをリストするか、(3)JacksonFeatureをに追加する必要があります。 web.xml内のプロバイダーのリスト
アプリケーションサブクラス:
public class MyApplication extends ResourceConfig {
public MyApplication() {
// (1)
register(JacksonFeature.class); // <----- Jackson Support
packages("the.package.of.your.resources");
}
}
またはweb.xml:
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>
org.glassfish.jersey.servlet.ServletContainer
</servlet-class>
<init-param>
<!-- (2) -->
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>
the.package.of.your.resources,
org.codehaus.jackson.jaxrs <!-- Jackson providers -->
</param-value>
</init-param>
<init-param>
<!-- (3) -->
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>
org.glassfish.jersey.jackson.JacksonFeature
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
詳細を見る ここの「第2号」 。 ...classnames
プロパティの場合、登録するプロバイダーが複数ある場合は、同じparam-valueにコンマ、セミコロン、または改行で区切ってリストする必要があります。
ああ、参考までに、ContextResolver
はObjectMapper
を取得可能なコンテキストに登録するだけなので、MessageBodyReader/MessageBodyWriters
はそれを再利用できます。ただし、マーシャリング/アンマーシャリングに必要な実際のMessageBodyReader/Writer
は登録されません。
こんにちは私は上記が良い解決策だとは思いません。ジャージスプリングブーツジャクソンを提供しなければならないという同じ問題に直面したので。
上記のJacksonFeature.classは、将来のSpringbootアプリケーションで問題となる機能が少ないglassfishからのものです。
public class MyApplication extends ResourceConfig {
public MyApplication() {
// (1)
register(ObjectMapperContextResolver.class); // <----- Jackson Support
packages("the.package.of.your.resources");
}
}
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;
import org.springframework.beans.factory.annotation.Autowired;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
private final ObjectMapper mapper;
public ObjectMapperContextResolver() {
mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
@Override
public ObjectMapper getContext(Class<?> type) {
return mapper;
}
}
重要な点は、ObjectMapperをcom.fasterxml.jackson.databind.ObjectMapperとしてインポートする必要があることです。最新のスプリングブーツジャクソンのために