如何使用Jackson和Spring模块设置对象映射器

Zip*_*per 8 java spring jersey jackson

从这个答案(/sf/answers/1092378311/)我试图设置杰克逊在我的DTO中处理Joda日期时间,但我很难理解ObjectMapper代码应该存在的位置.我在ObjectMapper上阅读了很多不同的文章,但它们似乎都在处理旧版本.我可以拿走我已经发现的东西并破解它的工作,但我想知道用Spring 3.2.2/Jackson 2/Jersey做什么被认为是正确的方法.我应该指出,我只想添加joda时间映射模块,我不想要任何其他自定义的jackson.我有点像春天的新手,所以请原谅我,如果这是一个简单而明显的答案,我只是错过了.

小智 6

我从未使用过Spring,但是使用RESTeasy框架我遇到了同样的问题.知道这一点,我会尽力给你一些答案/方向来搜索.

为了回答你的一个问题,每当你必须处理序列化/反序列化到json进程中时,ObjectMapper"必须存活".例如 :

MyObject myObject = new MyObject();
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(myObject);
Run Code Online (Sandbox Code Playgroud)

正如您提供的链接所指出的,如果要将模块添加到ObjectMapper,则必须在创建映射器后添加以下行:

mapper.registerModule(new AnyModuleYouNeed());
Run Code Online (Sandbox Code Playgroud)

现在,我不是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());
    }
}
Run Code Online (Sandbox Code Playgroud)

在我指向你的网站上,他们讲述了一种优雅的方式来为Spring 3.1用户注册一个cusom ObjectMapper:http://magicmonster.com/kb/prg/java/spring/webmvc/mvc_spring_config_namespace.html

它可能是有用的.

最后,请原谅我可怜的英语,如果你的问题得到解决,请告诉我.