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

时间:2013-07-05 19:42:03

标签: java spring jersey jackson

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

1 个答案:

答案 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

它可能很有用。

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