java - Spring 3.2 和 jackson 2 : add custom object mapper

标签 java json spring spring-mvc jackson

我正在 Spring MVC 中开发一个 REST Web 服务。我需要更改 jackson 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 的一些代码中改编了它

在我的 Controller 中,我使用的是@ResponseBody。 我在哪里做错了?谢谢

最佳答案

您应该使用 @JsonSerialize 注释相应的模型字段注释。在您的情况下,它可能是:

public class MyMongoModel{
   @JsonSerialize(using=ObjectIdSerializer.class)
   private ObjectId id;
}

但在我看来,最好不要使用实体模型作为 VO。更好的方法是在它们之间有不同的模型和映射。 您可以找到my example project here (我以 Spring 3 和 Jackson 2 为例使用日期序列化)。

关于java - Spring 3.2 和 jackson 2 : add custom object mapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14363555/

相关文章:

java - 如何让消息出现在不同的侧面?

java - 为什么Kafka的seekToBeginning和seekToEnd不能与assign一起使用?

java - 调用非同步方法时是否释放锁

java - 非事务性方法也被代理调用,如何避免这种情况?

java - 哪个控制结构与 3 个可能的输入一起使用(效率)

javascript - 如何在rails中使用JSON数据并将其提供给javascript

javascript - Polymer JS POST JSON 格式

javascript - 将 JSON 数组输出到图像网格

java - 在 Spring Boot 应用程序中安排任务的最佳方法是什么

javascript - 如何将对象从 angularjs 传递到 spring Controller