Jersey 2.9和Jackson 1.x作为JSON提供者

时间:2014-05-28 07:12:36

标签: json rest jersey jackson jersey-2.0

我依赖于使用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提供者?

2 个答案:

答案 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;
}

}