【问题标题】:How do I setup an object mapper with a module for Jackson and Spring如何使用 Jackson 和 Spring 的模块设置对象映射器
【发布时间】:2013-07-03 23:16:10
【问题描述】:

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

【问题讨论】:

    标签: java spring jersey jackson


    【解决方案1】:

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

    要回答您的一个问题,ObjectMapper“必须存在”,只要您必须处理序列化/反序列化到/来自 json 进程。例如:

    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

    可能有用。

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

    【讨论】:

    • 非常感谢,您为我节省了很多时间。特别是对于第二个链接。但是对于 Jackson2,应该有 MappingJackson2HttpMessageConverter。
    • 我有或多或少相同的问题,但仍不清楚。我的服务器启动时模块是否已注册?还是按要求?如果我的序列化代码只是 POJO 中的一堆 @XmlElement 条目,这是否意味着我必须创建一个映射器并在需要 JSONObject 支持的每个 pojo 中使用它?顺便说一句,我没有使用弹簧
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2012-12-31
    • 2014-09-18
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    相关资源
    最近更新 更多