雷斯特 杰克逊 - 在哪里注册模块



我已经使用了3月2.2日的Restlet GA快照,并使用Jackson处理JSON转换。一切都很好,本质上是看不见的。特别是,我什至不需要实例化对象拍摄者。我也一直在使用joda datetime,这也很好。

本周,我正在升级到最新的2.2快照,该快照使用Jackson 2.0.4(而不是1.9)。在该版本的杰克逊(Jackson)中,对Joda DateTime的支持已移至模块(外部杰克逊库)。

现在,当我运行测试代码时,我会沿着以下路线遇到错误。

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"])

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

杰克逊人的答案是我必须注册处理转换的jodamodule,如下所示:

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

这似乎很简单,但是我不知道将此代码放在哪里。我的测试代码正在调用:

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

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

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

,然后我拥有具有

的承诺。
@Override
public final Representation postJson(final CommitmentDTO commitmentDTO) {...}
@Override
public final Representation postForm(final Form form) {...}

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

我尝试在我的CreateInboundRoot中添加两个代码线的两条代码行,但这似乎并没有区别。

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

我刚刚尝试了雷斯特2.2的最后一个快照(10月,基于杰克逊2.1.0),它只是对我有用的。

最新更新