当前位置: 首页 > 面试题库 >

如何全局设置Jackson忽略Spring中的未知属性?

阳念
2023-03-14
问题内容

ackson具有使用以下命令忽略类中未知属性的注释:

@JsonIgnoreProperties(ignoreUnknown = true) 

它允许你使用以下注释忽略特定属性:

@JsonIgnore

如果要全局设置,可以修改对象映射器:

// jackson 1.9 and before
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// or jackson 2.0
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

你如何使用spring对其进行全局设置,以便@Autowired在服务器启动时无需编写其他类?


问题答案:

对于杰克逊1.9x或更低版本,你可以使用对象映射器提供程序忽略未知属性

@Provider
@Component
public class JerseyObjectMapperProvider implements ContextResolver<ObjectMapper> {

    @Override
    public ObjectMapper getContext(Class<?> type) {

        ObjectMapper result = new ObjectMapper();
        result.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        return result;
    }
}

For jackson 1.9x及更高版本,你可以使用对象映射器提供程序忽略未知属性

@Provider
@Component
public class JerseyObjectMapperProvider implements ContextResolver<ObjectMapper> {

    @Override
    public ObjectMapper getContext(Class<?> type) {

        ObjectMapper result = new ObjectMapper();
        result.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        return result;
    }
}

Spring不会自动发现Jersey类。必须手动注册。

public class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        register(JerseyObjectMapperProvider.class);
    }
}


 类似资料:
  • 我有一个Spring Boot1.5应用程序,它是用文件配置的。我需要管理Default-Tomcat的连接池。

  • 我正在开发一个Spring启动应用程序(使用版本1.2.5.RELEASE),当我使用在本地运行它时,它工作得非常好。但是,在生产环境中,应用程序需要在独立的Tomcat中作为WAR运行。使用正确配置的也可以工作。 当我为WAR添加一个名为的上下文参数时,问题就开始了。Spring Boot尝试配置其,并拾取参数,导致以下异常: 组织。springframework。豆。NotWritablePr

  • 问题内容: 我想序列化一个不受我控制的POJO类,但是想避免序列化任何来自超类而不是最终类的属性。例: 您可以从示例中猜测到,该类是由JOOQ生成的,并且是从复杂的基类UpdatableRecordImpl继承的,该基类还具有一些类似于bean属性的方法,这会在序列化过程中引起问题。另外,我有几个类似的类,因此最好避免对所有生成的POJO复制相同的解决方案。 到目前为止,我已经找到以下可能的解决方

  • > 使用mixin技术忽略来自超类的特定字段,如下所示:我如何告诉jackson忽略一个我无法控制源代码的属性? 这样做的问题是,如果基类发生了变化(例如,其中出现了一个新的getAnything()方法),它可能会破坏我的实现。 实现一个自定义序列化程序并在那里处理问题。这在我看来有点矫枉过正。 但是,从纯设计的角度来看,最好的方法是告诉jackson我只想序列化最终类的属性,而忽略所有继承的属

  • 我有以下课程- 我如何通过使用Jackson JSON API动态地排除字段序列化?