从这个答案(https://stackoverflow.com/a/15605404/650784)我试图设置杰克逊在我的 DTO 中处理 Joda 日期时间,但我很难理解 ObjectMapper 代码应该在哪里。我已经阅读了很多关于 ObjectMapper 的不同文章,但它们似乎都在处理旧版本。我可以利用我已经找到的东西并破解它来工作,但我想看看什么被认为是使用 Spring 3.2.2/Jackson 2/Jersey 执行此操作的正确方法。我应该指出,我只想添加 joda 时间映射模块,我不想要杰克逊的任何其他自定义。我有点像春天的新手,所以如果这是我刚刚错过的一些简单而明显的答案,请原谅我。
1 回答
我从未使用过 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 用户注册 cusom ObjectMapper 的优雅方式:http: //magicmonster.com/kb/prg/java/spring/webmvc/mvc_spring_config_namespace.html
它可能有用。
最后,请原谅我糟糕的英语,如果你的问题解决了,请告诉我。