从这个答案(https://stackoverflow.com/a/15605404/650784)我试图设置杰克逊在我的DTO中处理Joda日期时间,但我很难理解ObjectMapper代码应该存在的位置。我在ObjectMapper上阅读了很多不同的文章,但它们似乎都在处理旧版本。我可以拿走我已经发现的东西并破解它的工作,但我想知道用Spring 3.2.2 / Jackson 2 / Jersey做什么被认为是正确的方法。我应该指出,我只想添加joda时间映射模块,我不想要任何其他自定义的jackson。我有点像春天的新手,所以请原谅我,如果这是一个我错过的简单而明显的答案。
答案 0 :(得分:6)
我从未使用过Spring,但是使用RESTeasy框架我遇到了同样的问题。知道这一点,我会尝试给你一些答案/方向来搜索。
要回答你的一个问题,每当你必须处理序列化/反序列化到json进程中时,ObjectMapper“必须存活”。例如:
MyObject myObject = new MyObject();
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(myObject);
正如您提供的链接中所指出的,如果您要将模块添加到ObjectMapper,则必须在创建映射器后添加以下行:
mapper.registerModule(new AnyModuleYouNeed());
现在,我不是Spring用户,但我认为当spring提供自己的序列化/反序列化过程时,你希望这个过程是自动的。
我在网上发现了这个:http://magicmonster.com/kb/prg/java/spring/webmvc/jackson_custom.html
在您的情况下,我认为只有第2点和第3点对您有用,并且因为您不需要自定义序列化程序,但您只需要向映射器添加模块,我认为自定义ObjectMapper看起来应该是这样的:
@Component
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper() {
registerModule(new AnyModuleYouNeed());
}
}
在我指向你的网站上,他们讲述了为Spring 3.1用户注册一个优雅的方式来运行ObjectMapper:http://magicmonster.com/kb/prg/java/spring/webmvc/mvc_spring_config_namespace.html
它可能很有用。
最后,请原谅我可怜的英语,如果你的问题得到解决,请告诉我。