一尘不染

Spring@ResponseBody Jackson JsonSerializer与JodaTime

spring

我在下面的序列化器中进行JodaTime处理:

public class JodaDateTimeJsonSerializer extends JsonSerializer<DateTime> {

    private static final String dateFormat = ("MM/dd/yyyy");

    @Override
    public void serialize(DateTime date, JsonGenerator gen, SerializerProvider provider)
            throws IOException, JsonProcessingException {

        String formattedDate = DateTimeFormat.forPattern(dateFormat).print(date);

        gen.writeString(formattedDate);
    }

}

然后,在每个模型对象上,执行以下操作:

@JsonSerialize(using=JodaDateTimeJsonSerializer.class )
public DateTime getEffectiveDate() {
    return effectiveDate;
}

通过以上设置,@ResponseBodyJackson Mapper肯定可以工作。但是,我不喜欢继续写书的想法@JsonSerialize。我需要的是没有@JsonSerializeon模型对象的解决方案。是否可以将这种配置作为一个配置写入spring xml的某个地方?

感谢你的帮助。


阅读 380

收藏
2020-04-18

共1个答案

一尘不染

尽管你可以为每个日期字段添加注释,但最好为对象映射器进行全局配置。如果使用杰克逊,则可以按以下方式配置弹簧:

<bean id="jacksonObjectMapper" class="com.company.CustomObjectMapper" />

<bean id="jacksonSerializationConfig" class="org.codehaus.jackson.map.SerializationConfig"
    factory-bean="jacksonObjectMapper" factory-method="getSerializationConfig" >
</bean>

对于CustomObjectMapper:

public class CustomObjectMapper extends ObjectMapper {

    public CustomObjectMapper() {
        super();
        configure(Feature.WRITE_DATES_AS_TIMESTAMPS, false);
        setDateFormat(new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'ZZZ (z)"));
    }
}

当然,SimpleDateFormat可以使用你需要的任何格式。

2020-04-18