当前位置: 首页 > 知识库问答 >
问题:

Spring3.2和Jackson 2:添加自定义对象映射器

皇甫乐
2023-03-14

我正在用spring MVC开发一个REST webservice。我需要更改jackson 2序列化mongodb对象的方式。我不知道该怎么做,因为我找到了Jackson2的部分文档,我所做的是创建一个自定义序列化程序:

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>

共有1个答案

高峻
2023-03-14

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

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

但在我看来,它最好不要使用实体模型作为VOS。更好的方法是有不同的模型并在它们之间映射。您可以在这里找到我的示例项目(我以Spring3和Jackson2为例使用了日期序列化)。

 类似资料:
  • 我有一个用例,其中我需要维护两组JSON输出,一组具有JSON属性的漂亮名称,另一组没有。所以我决定自定义ObjectMapper,以便它忽略字段上的@JSONProperty(“pretty name”)注释,而使用字段属性名。在本例中,希望得到以下JSON输出 具有漂亮名称的JSON输出如下所示 我的ObjectMapper配置代码如下所示 我看了一些其他的答案,但对我不起作用。我得到了一个N

  • 初始化服务器时,出现以下错误: java.lang.IllegalStateException:无法将[java.lang.String]类型的值转换为属性“Object Mapper”所需的类型[org.codehaus.jackson.map.objectMapper]:在org.springframework.beans.typeConverterDelegate.ConvertifEmen

  • 我将 Jackson 2.7.5 与 Jersey 2.25.1 配合使用。我正在尝试修复现有的生产代码,当它在JSON输入中获得意外字段时,它现在因“无法识别的PropertyException:无法识别的字段”而失败。 在研究这个问题时,我发现了几篇旧帖子(5年),建议各种修复方法与我当前的代码非常不同。我不太关注这些,因为它们是针对旧版本的Jackson/Jersey。最近的建议,包括泽西岛

  • 使用代替和代替 然后在请求属性中添加 但是当我在javascript中检索它时,我得到了jsonObject的值 我在我的项目中已经使用了下面的库,如果需要,可以使用任何新的库

  • 给出以下SQL模式: 我想要一个地图绘制者,比如: 所以我可以这样做: 我不知道怎么做,除了在personMapper之后。getPersons()来操作结果。

  • 模型类1 型号2类 Rest控制器 为什么我的对象映射器bean(具有唯一的bean名称)影响了现有默认spring boot对象映射器的功能 在这种情况下,如果我无法使用默认对象映射器控制遗留代码,那么在不破坏遗留代码的情况下定义自定义对象映射器的选项是什么。注意:我不能以任何方式更改遗留代码。 如有任何帮助,不胜感激。