我依赖于使用Jackson 1.x注释的第三方库Woorea Openstack-SDK(https://github.com/woorea/openstack-java-sdk)。由于Jersey 2.9中的Jackson更新(Jackson 1.x - > Jackson 2.x),Openstack-SDK变得不兼容。
有没有办法将Jersey 2.9和Jackson 1.x一起用作JSON提供者?
答案 0 :(得分:0)
我使用https://github.com/FasterXML/jackson-jaxrs-providers/将Jackson 2.x提供给之前版本的Jersey(不受Jackson 2.x支持)。应该是现在提供杰克逊1.x到新版本的泽西岛(支持杰克逊2.0)的替代方案。否则,请检查上述链接中的实现。你也可以这样做,因为它主要是关于注册一个新的提供者。
答案 1 :(得分:0)
我找到了一个解决方案......我删除了对工件jersey-media-json-jackson
的依赖关系并注册了以下功能:
package test;
import javax.ws.rs.core.Configuration;
import javax.ws.rs.core.Feature;
import javax.ws.rs.core.FeatureContext;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.MessageBodyWriter;
import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider;
import org.codehaus.jackson.jaxrs.JsonMappingExceptionMapper;
import org.codehaus.jackson.jaxrs.JsonParseExceptionMapper;
import org.glassfish.jersey.CommonProperties;
import org.glassfish.jersey.internal.InternalProperties;
import org.glassfish.jersey.internal.util.PropertiesHelper;
public class Jackson1xFeature implements Feature {
private final static String JSON_FEATURE = Jackson1xFeature.class.getSimpleName();
@Override
public boolean configure(final FeatureContext context) {
final Configuration config = context.getConfiguration();
final String jsonFeature = CommonProperties.getValue(config.getProperties(), config.getRuntimeType(), InternalProperties.JSON_FEATURE, JSON_FEATURE, String.class);
// Other JSON providers registered.
if (!JSON_FEATURE.equalsIgnoreCase(jsonFeature)) {
return false;
}
// Disable other JSON providers.
context.property(PropertiesHelper.getPropertyNameForRuntime(InternalProperties.JSON_FEATURE, config.getRuntimeType()), JSON_FEATURE);
// Register Jackson.
if (!config.isRegistered(JacksonJaxbJsonProvider.class)) {
// add the default Jackson exception mappers
context.register(JsonParseExceptionMapper.class);
context.register(JsonMappingExceptionMapper.class);
context.register(JacksonJaxbJsonProvider.class, MessageBodyReader.class, MessageBodyWriter.class);
}
return true;
}
}