java - ReSTLet + Jackson - 在哪里注册模块

标签 java jackson restlet

我一直在使用 ReSTLet GA 的 March 2.2 Snapshot 一段时间,并使用 Jackson 来处理 JSON 转换。一切都运行良好,而且基本上是无形的。特别是,我什至不需要实例化 objectMapper。我也一直在使用 Joda DateTime,它也很好。

本周,我升级到最新的 2.2 Snapshot,它使用 Jackson 2.0.4(而不是 1.9)。在该版本的 Jackson 中,对 Joda DateTime 的支持已移至一个模块(在核心 Jackson 库之外)。

现在,当我运行测试代码时,出现以下错误:

WARNING: Unable to convert a [application/json,UTF-8] representation into an object of class com.fourspires.api.dto.CommitmentDTO
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "year" (class org.joda.time.DateTime), not marked as ignorable (2 known properties: , "chronology", "millis"])
 at [Source: org.restlet.engine.io.UnclosableInputStream@dcc5312; line: 1, column: 701] (through reference chain: com.fourspires.api.dto.CommitmentDTO["completeBy"]->org.joda.time.DateTime["year"])

当我尝试执行 Post() 时会导致 415 错误。

Jackson 的回答是我必须按如下方式注册处理转换的 JodaModule:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JodaModule());  

这看起来很简单,但我不知道把这段代码放在哪里。我的测试代码调用:

commitmentsResource = 
  rootClient.getChild(SOME_PATH, CommitmentsResource.class);  
commitmentsClient = ((ClientProxy) commitmentsResource).getClientResource();
commitmentsClient.post()

在服务器端,我有一个接口(interface):

public interface CommitmentsResource {
  @Get Representation represent();
  @Post("json") Representation postJson(CommitmentDTO commitment);  
  @Post("form") Representation postForm(Form commitmentForm);  
}

然后我有 CommitmentServerResource 有

@Override
public final Representation postJson(final CommitmentDTO commitmentDTO) {...}

@Override
public final Representation postForm(final Form form) {...}

所以我看不到在哪里插入 objectMapper 以便可以调用 Post()。这就像我想设置全局/默认对象映射器,但我不知道在哪里可以找到它(或者它是否存在)。

我尝试将两行 objectMapper 代码添加到我的 createInboundRoot,但这似乎没有什么不同。

非常感谢您的任何建议,因为我似乎完全被困在这里....

最佳答案

我刚刚尝试了 ReSTLet 2.2 的最后一个快照(10 月发布,基于 jackson 2.1.0),它对我很有效。

关于java - ReSTLet + Jackson - 在哪里注册模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13199969/

相关文章:

java - ReSTLet:使用删除方法

java - ReSTLet 在 HTTPS BindException 上与 Jetty 一起运行

java - Google Drive Java 快速入门指南警告

java - 我可以在哪个容器中收集字符串来显示其中的任何一个

java - 将由 * 分隔的文本文件中的行拆分为各种列表 Java

java - Jersey & Jackson - 修改 Jackson 输出的资源

java - 私有(private)变量在对象之间共享

java - 将 Jackson 2.x 配置为不使用 @XmlElement 字段注释进行 JSON 字段命名

java - Jackson 在 Spring Boot 中错误地序列化了 ZonedDateTime

java - ReSTLet 的 OAuth 扩展在 Maven 中在哪里?