9

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

4

1 回答 1

7

我从未使用过 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

它可能有用。

最后,请原谅我糟糕的英语,如果你的问题解决了,请告诉我。

于 2013-07-08T08:56:27.453 回答