【问题标题】:Jackson annotations ignored in Tomcat but work fine in JerseyTestJackson 注释在 Tomcat 中被忽略,但在 JerseyTest 中工作正常
【发布时间】:2019-04-29 08:53:48
【问题描述】:

我正在 Tomcat 7 中运行 Jersey 2.x 应用程序。我正在使用带有所有正确依赖项的 Jackson 2。

我用JerseyTest 编写了一个基本测试来检查我的API。我的杰克逊注释在那里工作得很好。但是,一旦我在 Tomcat 中部署它,我的 Jackson 注释都不起作用。

另一个有趣的事情是,当我在默认 Jersey ObjectMapper 上注册自定义反序列化器时

private static ObjectMapper createDefaultMapper() {
    final ObjectMapper mapper = new ObjectMapper();
    final SimpleModule module = new SimpleModule();
    module.addDeserializer(MyEntity.class, new MyEntityDeserializer());
    mapper.enable(SerializationFeature.INDENT_OUTPUT);

    mapper.registerModule(module);
    return mapper;
}

反序列化器在 Tomcat 中被拾取。只是注释不是。

我试过的注释是

@JsonCreator
@JsonDeserialize
@JsonSetter 

我不太确定从哪里开始调试此问题。

【问题讨论】:

  • 哪些注释不起作用,可以分享代码吗?
  • @user7294900 我已经更新了这个问题。我有一种感觉,我的杰克逊注释在 Tomcat 中都不起作用。他们与 JerseyTest 配合得很好
  • 在使用这些注解时,您是否在每个字段前指定了@JsonProperty?
  • @sachinrai 仅适用于需要它的字段。我不是在滥用杰克逊,因为它在 Tomcat 之外工作,而是由于某种原因,在部署 webapp 时没有拾取注释。例如,当我手动创建它的实例时,我的反序列化器实际上被击中,如我的示例所示。但是使用注释它不是由Tomcat在运行时创建的

标签: java tomcat jackson jersey


【解决方案1】:

事实证明,我从我的 web 应用程序中引用的实体被编译成一个 JAR,它没有被 Tomcat 重新加载。重启tomcat解决了这个问题。

【讨论】:

    猜你喜欢
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 2018-07-07
    相关资源
    最近更新 更多