【问题标题】:How to configure json format when using jaxb annotations with jerseyjersey使用jaxb注解时如何配置json格式
【发布时间】:2011-05-10 14:07:09
【问题描述】:

我正在使用 jersey 公开一个服务,该服务使用 jaxb 注释类来配置 json 的外观。

我正在尝试在每个 json 元素中包含类型指令。我通过提供这样的 Provider 来做到这一点:

import org.codehaus.jackson.JsonParser.Feature;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.ObjectMapper.DefaultTyping;

@Provider
    @Produces(MediaType.APPLICATION_JSON)
    public class CmsContextResolver implements ContextResolver<ObjectMapper> {

        ObjectMapper mapper;

        public CmsContextResolver() {
            mapper = new ObjectMapper();
            // @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include =
            // JsonTypeInfo.As.WRAPPER_OBJECT, property = "@type")
            mapper.configure(Feature.INTERN_FIELD_NAMES, true);
            mapper.enableDefaultTypingAsProperty(DefaultTyping.NON_FINAL, "@type"); 
        }

        @Override
        public ObjectMapper getContext(Class<?> arg0) {
            return mapper;
        }
    }

而且这个提供商肯定会被选中。

10 May 2011 3:53:18 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Provider classes found:
  class com.afrozaar.cms.service.CmsContextResolver

但这并没有什么不同。 json的格式不受影响。

据我所知,问题出在 jersey 没有使用 jackson 序列化这一事实?或者那件球衣忽略了我的杰克逊配置覆盖......

【问题讨论】:

    标签: jaxb jersey jackson


    【解决方案1】:

    我不知道为什么您的代码不起作用,但这是我使用的:

    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    import javax.ws.rs.ext.Provider;
    import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider;
    
    @Provider
    @Produces(MediaType.APPLICATION_JSON)
    public class JsonProvider extends JacksonJaxbJsonProvider {
    
        public JsonProvider() {
            super();
            setMapper( myConfiguredObjectMapper );
        }
    

    【讨论】:

    • 谢谢,本来打算回答我自己的问题,但你省去了我的麻烦。这就是我所做的 :-),配置了我自己的 jackson-json 提供程序。
    • 我遇到了与 Jersey 2.4 和 Jackson 2.2.3 的 OP 相同的问题——我无法让运行时识别自定义对象映射器...我找到的每个解决方案都使用 Spring MVC -- 我不是 -- 除了这个。
    • 我一直在努力解决问题,直到找到您的解决方案。谢谢。
    猜你喜欢
    • 2011-12-20
    • 2012-12-01
    • 2023-04-09
    • 1970-01-01
    • 2013-01-21
    • 2011-08-26
    • 2013-09-09
    • 2012-11-09
    相关资源
    最近更新 更多