Spring MVC JSON序列化@JsonSerialize被忽略

时间:2014-12-28 14:58:47

标签: java spring spring-mvc serialization jackson

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

JsonSerializer.serialize未被调用。

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

我试图对吸气剂进行注释,但这里没有成功。

使用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是我自己的方法,可以正常工作 - 返回一个我想要的字符串。

1 个答案:

答案 0 :(得分:2)

作为解决方法:

您可以实现自己的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。