Spring 3.2和Jackson 2:添加自定义对象映射器 [英] Spring 3.2 and Jackson 2: add custom object mapper
问题描述
我正在Spring MVC中开发一个REST Web服务。我需要改变杰克逊2序列化mongodb objectids的方式。我不确定该做什么,因为我找到了jackson 2的部分文档,我做的是创建一个自定义序列化器:
I'm developing a REST webservice in spring MVC. I need to change how jackson 2 serialize mongodb objectids. I'm not sure of what to do because I found partial documentation for jackson 2, what I did is to create a custom serializer:
public class ObjectIdSerializer extends JsonSerializer<ObjectId> {
@Override
public void serialize(ObjectId value, JsonGenerator jsonGen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
jsonGen.writeString(value.toString());
}
}
创建ObjectMapper
Create a ObjectMapper
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper() {
SimpleModule module = new SimpleModule("ObjectIdmodule");
module.addSerializer(ObjectId.class, new ObjectIdSerializer());
this.registerModule(module);
}
}
然后注册映射器
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="my.package.CustomObjectMapper"></bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
我的CustomConverter永远不会被调用。我认为CustomObjectMapper定义是错误的,我从杰克逊1.x的一些代码改编它
My CustomConverter is never called. I think the CustomObjectMapper definition is wrong,I adapted it from some code for jackson 1.x
在我的控制器中我正在使用@ResponseBody。
我在哪里做错了?谢谢
In my controllers I'm using @ResponseBody. Where am I doing wrong? Thanks
推荐答案
您应该使用 @JsonSerialize annontation。在你的情况下,它可能是:
You should annotate corresponding model field with @JsonSerialize annontation. In your case it may be:
public class MyMongoModel{
@JsonSerialize(using=ObjectIdSerializer.class)
private ObjectId id;
}
但在我看来,最好不要将实体模型用作VO 。更好的方法是在它们之间建立不同的模型和映射。
您可以在这里找到我的示例项目(我使用Spring 3和Jackson 2作为示例的日期序列化。)
But in my opinion, it should better don't use entity models as VOs. Better way is to have different models and map between them. You can find my example project here (I used date serialization with Spring 3 and Jackson 2 as example).
这篇关于Spring 3.2和Jackson 2:添加自定义对象映射器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!