【问题标题】:Jackson 2.0 with Jersey 1.12杰克逊 2.0 和泽西 1.12
【发布时间】:2012-05-19 20:23:59
【问题描述】:

有没有人设法将 Jackson 2.0 与 Jersey 1.12 一起使用。知道会很有趣。我们必须到处使用jackson 1.9.x,因为jersey 有jackson 如此强的耦合。从我所见,甚至球衣 2.0M3 仍在使用杰克逊 1.9.2。所以看来,等球衣队在不久的将来这样做是没有意义的。

【问题讨论】:

    标签: java jersey jackson


    【解决方案1】:

    自定义提供程序有效;和“官方”Jackson 2.0 JSON provider project 也是如此,但具有更多功能(能够在资源方法上使用 @JsonView 注释和其他一些注释)。

    这是 JAX-RS 的优点之一:一切都是模块化的,添加新的改进提供程序非常容易。

    【讨论】:

    • 我应该只包括罐子吗?强制 Jersey 使用此提供程序需要什么?
    • 你可以尝试只包含它——2.0确实有META-INF/services——但如果这不起作用,需要在Application实现中注册提供者。
    • 奇怪的是,即使在泽西岛开启了 PojoMapping 功能,它仍然有效。
    • 注册并没有那么奇怪:1.x 没有它(担心它会与旧设置冲突)。所以使用 2.x PojoMapping 应该不需要......仍然可以用其他提供程序显式替换它。
    • 在 Jackson 2.2 中,“官方”提供者更改为 jackson-jaxrs-providers,它确实是“即插即用”,即只需将其添加到类路径中,您将获得 POJO-to-JSON 映射使用默认设置。
    【解决方案2】:

    我的项目中有 Jackson 2.0 和 Jersey 1.12。我对此没有任何问题,但可能的原因是我有自定义 Provider 和一些额外的 ObjectMapper 设置。简化版:

    import javax.ws.rs.ext.ContextResolver;
    import javax.ws.rs.ext.Provider;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    @Provider
    public class ObjectMapperProvider implements ContextResolver<ObjectMapper> {
    
        private final ObjectMapper defaultObjectMapper;
    
        public ObjectMapperProvider() {
            defaultObjectMapper = new ObjectMapper();
        }
    
        @Override
        public ObjectMapper getContext(Class<?> type) {
            return defaultObjectMapper;
        }
    }
    

    【讨论】:

    • 您是否需要做一些特别的事情才能让 Jersey 使用这个提供程序?我正在尝试从 Jackson 1.9 迁移到 2.0(详见this question),但我的 ContextResolver-implementation 没有被使用。
    【解决方案3】:

    如果您尝试将 JsonView 与 Jersey 一起使用,如果您使用此处的方法 2.2,则必须使用 org.codehaus.jackson.map.annotate.JsonView:http://wiki.fasterxml.com/JacksonFAQJaxRs

    如果要使用com.fasterxml中的JsonView,则必须在该页面使用通用方法(1)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      • 2015-10-19
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      相关资源
      最近更新 更多