Java Restlet&x2B;Jackson-在哪里注册模块
我已经使用Restlet GA的3月2.2快照一段时间了,并使用Jackson处理JSON转换。一切都运转良好,基本上是无形的。特别是,我甚至不需要实例化objectMapper。我也一直在使用Joda DateTime,这也很好 本周,我升级到最新的2.2快照,它使用Jackson 2.0.4(而不是1.9)。在该版本的Jackson中,对Joda DateTime的支持已经转移到一个模块(在核心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
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错误和未找到年份字段)。