Java Restlet&x2B;Jackson-在哪里注册模块

Java Restlet&x2B;Jackson-在哪里注册模块,java,jackson,restlet,Java,Jackson,Restlet,我已经使用Restlet GA的3月2.2快照一段时间了,并使用Jackson处理JSON转换。一切都运转良好,基本上是无形的。特别是,我甚至不需要实例化objectMapper。我也一直在使用Joda DateTime,这也很好 本周,我升级到最新的2.2快照,它使用Jackson 2.0.4(而不是1.9)。在该版本的Jackson中,对Joda DateTime的支持已经转移到一个模块(在核心Jackson库之外) 现在,当我运行我的测试代码时,我得到了如下错误: WARNING: Una

我已经使用Restlet GA的3月2.2快照一段时间了,并使用Jackson处理JSON转换。一切都运转良好,基本上是无形的。特别是,我甚至不需要实例化objectMapper。我也一直在使用Joda DateTime,这也很好

本周,我升级到最新的2.2快照,它使用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()
在服务器端,我有一个界面:

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),它对我很有用。

转到:-我在lib目录中的“Google App Engine版”中选择了Zip存档,有一个名为com.fasterxml.jackson_2.0的目录,在该目录下的library.xml中,我发现:感谢您上传带有jackson 2.1版本的Restlet/GAE版本。我还将jackson-datatype-joda-2.1.0.jar添加到我的项目中(因为joda支持不在2.x中的jackson内核中)。最后,我为所有返回DateTime的getter添加了@JsonSerialize(使用=DateTimeSerializer.class),并修复了我上面遇到的问题(415错误和未找到年份字段)。