小编典典

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

spring

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在服务器启动时无需编写其他类?


阅读 2335

收藏
2020-04-13

共1个答案

小编典典

对于杰克逊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);
    }
}
2020-04-13