Spring MVC的(JSON)序列化可以通过配置ObjectMapper来实现。为了实现自定义对象或者接口的序列化,我们需要继承ObjectMapper,然后再加入自定义的序列化和反序列化的实现类就可以了。
public class TestObjectMapper extends ObjectMapper {
public TestObjectMapper(){
super();
SimpleModule testModule=new SimpleModule("TestModule", new Version(0,0,1,null));
//deserializers
testModule.addDeserializer(IDatetime.class, new DatetimeDeserializer());
//serializers
testModule.addSerializer(Date.class, new DateSerializer());
registerModule(testModule);
//add handler to handler unkonwn object property
getDeserializationConfig().addHandler(new DeserializationUnknownPropertyHandler());
//config to ignore unknown property
configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
}
public class JsonDateSerializer extends JsonSerializer<Date> {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd");
@Override
public void serialize(Date date, JsonGenerator gen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
// TODO Auto-generated method stub
String formattedDate = dateFormat.format(date);
gen.writeString(formattedDate);
}
}
webxml
<!-- Data Converter -->
<bean id="testObjectMapper" class="com.uv.smp.api.offersearch.v1.util.TestObjectMapper"/>
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="objectMapper" ref="testObjectMapper"/>
</bean>
<!-- Method Annotation Mapping -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="urlDecode" value="true"/>
</bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonConverter" />
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver ">
<property name="messageConverters">
<list>
<ref bean="jsonConverter" />
</list>
</property>
</bean>