【发布时间】:2012-12-31 01:48:58
【问题描述】:
我正在 Spring MVC 中开发一个 REST Web 服务。我需要更改杰克逊 2 序列化 mongodb objectid 的方式。我不确定该怎么做,因为我找到了 jackson 2 的部分文档,我所做的是创建一个自定义序列化程序:
public class ObjectIdSerializer extends JsonSerializer<ObjectId> {
@Override
public void serialize(ObjectId value, JsonGenerator jsonGen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
jsonGen.writeString(value.toString());
}
}
创建一个对象映射器
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 的定义是错误的,我从 jackson 1.x 的一些代码中改编了它
在我的控制器中,我使用的是@ResponseBody。 我在哪里做错了?谢谢
【问题讨论】:
-
序列化程序和注册对我来说看起来是正确的,所以我认为问题在于 xml 配置。
-
是的,感谢您的建议,我在文件周围有一个空的
标记。它现在正在工作 -
仅供参考,文档说要使用 StdSerializer:fasterxml.github.io/jackson-databind/javadoc/2.0.0/com/…
-
我遇到了类似的问题。您能否发布您的最终工作解决方案?
-
在我的项目中,我们扩展了 StdSerializer 而不是 JsonSerializer,但这不是问题。确保您使用的是 com.fasterxml.* 类而不是旧的 org.codehaus.* 类?
标签: java json spring spring-mvc jackson