2012-11-02 67 views
3

我一直在使用Restlet GA的March 2.2 Snapshot一段时间,并使用Jackson来处理JSON转换。一切都工作得很好,基本上是无形的。特别是,我甚至从不需要实例化一个objectMapper。我也一直在使用乔达日期时间,这也很好。Restlet + Jackson - 在哪里注册模块

本周,我升级到最新的2.2快照,它使用杰克逊2.0.4(而不是1.9)。在那个杰克逊版本中,对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: [email protected]; 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) {...} 

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

我试着将两个objectMapper代码行添加到我的createInboundRoot中,但这似乎没有什么区别。

非常感谢您的任何意见,因为我好像在这里完全卡住....

回答

1

我只是试着用的Restlet 2.2的最后一个快照(10月发布的基础上,杰克逊2.1.0) ,它只适用于我。

+0

去过:http://www.restlet.org/downloads/unstable - 我在“Google App Engine版”中选择了Zip存档在lib目录中,有一个名为com.fasterxml.jackson_2的目录1.0和在该目录中library.xml,我发现: <库ID =“杰克逊” ...... 高性能JSON处理器 2.0 这让我觉得,这是Jackson的2.0.4版本,而不是2.1版本,这让我觉得我下载了错误的Restlet版本。 但我似乎无法找到更新的。 –

+0

感谢您使用2.1版本的Jackson上传Restlet/GAE版本。我还将jackson-datatype-joda-2.1.0.jar添加到我的项目中(因为joda支持不在2.x中的jackson核心中)。最后,我添加了@JsonSerialize(使用= DateTimeSerializer.class) 为所有我的getter返回DateTime并修复了我上面的问题(415错误和年字段未找到)。 –