【问题标题】:Spring MVC JSON serialization @JsonSerialize is ignoredSpring MVC JSON 序列化 @JsonSerialize 被忽略
【发布时间】:2015-02-24 23:18:07
【问题描述】:

使用 Spring Boot、Spring MVC 并通过 List 返回 POJO。当使用我的自定义 JsonSerializer (@JsonSerialize(using = DateTimeSerializer.class)) 注释的字段时,Date 字段未序列化。

JsonSerializer.serialize 未被调用。

我怎样才能让这个工作 - 强制杰克逊调用我的自定义序列化程序? 我可以扩展 ObjectMapper 并设置一些东西,但到目前为止没有任何效果。

我尝试注释 getter,但在这里没有成功。

使用 Spring 4,Jackson 2.4.4,包含所有 jackson 依赖项(数据绑定、注释、核心)。我也加入了 Spring OXM。

DateTimeSerializer 类:

import java.io.IOException;
import java.util.Date;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

public class DateTimeSerializer extends JsonSerializer<Date> {

    @Override
    public void serialize(Date date, JsonGenerator gen, SerializerProvider provider) throws IOException, JsonProcessingException {
        gen.writeString(DateUtil.toCzechDateTime(date));
    }
}

DateUtil.toCzechDateTime 是我自己的方法,工作正常 - 返回我想要的字符串。

【问题讨论】:

  • 你能发布你的 DateTimeSerializer 类吗?
  • 好了,我已经编辑了我的帖子。
  • 另外,你能提供你使用@JsonSerialize的POJO吗?
  • 一个常见的问题是不小心将 Jackson 1.x 注释与 Jackson 2.x ObjectMapper 一起使用——所以请确保版本匹配(com.fasterxml.jackson 表示 2.x,org.codehaus.jackson 是 1.x )

标签: java spring spring-mvc serialization jackson


【解决方案1】:

作为解决方法:

您可以实现自己的ObjectMapper 类并全局设置日期格式。 (相应地编辑下面的代码)

public class CustomObjectMapper extends ObjectMapper {

    public SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");

    public CustomObjectMapper() {
        super();
        super.setDateFormat(df);
    }

或者您可以在 getter 中将 DateUtil.toCzechDateTime(date) 添加到您的 POJO 并忽略原始 getter。并使用 @JsonProperty("date") 返回新的 getter。

【讨论】:

  • 是的,我就是这样做的。总是有一些解决方法,没有时间永远考虑它。谢谢。
猜你喜欢
  • 2015-08-03
  • 2017-03-23
  • 2016-06-26
  • 2021-08-26
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 2015-10-23
  • 2014-04-28
相关资源
最近更新 更多