春天@ResponseBody杰克逊JsonSerializer与JodaTime

Fir*_*mir 15 spring json spring-mvc jodatime jackson

我有以下用于JodaTime处理的Serializer:

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

然后,在每个模型对象上,我这样做:

@JsonSerialize(using=JodaDateTimeJsonSerializer.class )
public DateTime getEffectiveDate() {
    return effectiveDate;
}
Run Code Online (Sandbox Code Playgroud)

通过以上设置,@ResponseBodyJackson Mapper确实有效.但是,我不喜欢我一直在写的想法@JsonSerialize.我需要的是没有@JsonSerializeon模型对象的解决方案.是否可以将此配置在spring xml中的某个位置编写为一个配置?

感谢您的帮助.

Moe*_*sio 11

虽然您可以为每个日期字段添加注释,但最好为对象映射器执行全局配置.如果您使用jackson,您可以按如下方式配置弹簧:

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

<bean id="jacksonSerializationConfig" class="org.codehaus.jackson.map.SerializationConfig"
    factory-bean="jacksonObjectMapper" factory-method="getSerializationConfig" >
</bean>
Run Code Online (Sandbox Code Playgroud)

对于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)"));
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,SimpleDateFormat可以使用您需要的任何格式.