繁体   English   中英

如何在Jersey 2.x中添加JSON支持

[英]How to add JSON Support in Jersey 2.x

我已将我的应用程序从Jersey 1.x迁移到2.x,并且我试图从web.xml替换以下条目

<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>

为了能够将实体获取为json。

我在官方文档中已经读到必须添加jersey-media-json-jackson依赖项并注册JacksonFeature来使用Jackson提供程序。

我添加了以下依赖项:

<dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>2.4.1</version>
</dependency>

但现在我不知道必须在web.xml文件中添加什么作为

<param-name>jersey.config.server.provider.packages</param-name>

有任何想法吗 ? 我不会通过web.xml之类的配置文件来执行此操作,而不会在我的代码内进行。

我的配置如下所示:

    <servlet>
        <servlet-name>REST Service</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.<your-company-name-here></param-value>
        </init-param>
        <init-param>
            <param-name>jersey.config.beanValidation.enableOutputValidationErrorEntity.server</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

我使用ResourceConfig类注册所有内容。 我还找到了描述其他方法的资源( http://blog.dejavu.sk/2013/11/19/registering-resources-and-providers-in-jersey-2/ )。

@ApplicationPath("/ws")
public class WsResourceConfig extends ResourceConfig {

    public WsResourceConfig() {
        register(Jackson2Feature.class);
        register(ObjectMapperResolver.class);
        //register(MultiPartFeature.class); // if needed
        //register(new LoggingFilter(LOGGER, true)); // to enable logging

        //register(my resources...); to register my service classes
    }

    private static class ObjectMapperResolver implements ContextResolver<ObjectMapper> {
        private static ObjectMapper mapper = new ObjectMapper();
        static {
            // configure mapper here
        }
        @Override
        public ObjectMapper getContext(Class<?> type) {
            return mapper;
        }
    }

    /**
     * Feature to disable Moxy and Enable Jackson processing
     */
    private static class Jackson2Feature implements Feature {

        @Override
        public boolean configure(FeatureContext context) {
            final String disableMoxy = PropertiesHelper.getPropertyNameForRuntime(
                    CommonProperties.MOXY_JSON_FEATURE_DISABLE,
                    context.getConfiguration().getRuntimeType());
            context.property(disableMoxy, true);

            // add the default Jackson exception mappers and allow jaxb annotations
            context.register(JsonParseExceptionMapper.class);
            context.register(JacksonJaxbJsonProvider.class, MessageBodyReader.class, MessageBodyWriter.class);
            return true;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM