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

标签 java spring jersey jackson

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

最佳答案

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

可能会有用。

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

关于java - 如何使用 Jackson 和 Spring 的模块设置对象映射器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17495875/

相关文章:

spring - RestTemplate getForObject 无法读取 JSON : Unexpected character ('<' (code 60))

java - 如何在 BadRequestException 中包含消息?

java - Jersey 项目中的类转换异常?

c# - 从 C++ 工具到……?尝试接触现代工具

spring - 等待一些 Spring ListenableFuture

java - Axis 2 - 是否可以通过 Web 界面测试操作?

java - 如何在Spring中使用restTemplate通过请求主体发出GET请求

java - 尝试使用 Jersey 创建 REst 服务

java - 使用 Javassist 插入包装原始方法逻辑的 try/finally 逻辑

java - 将整数数组更改为一系列字符串