Java Spring Boot 应用 FasterXml Jackson 库的配置

Mak*_*kin 2 java spring jackson

我有带有 Maven 依赖项的 Spring Boot 项目:com.fasterxml.jackson.datatype

我想启用两个属性 ACCEPT_EMPTY_STRING_AS_NULL_OBJECT 和 FAIL_ON_READING_DUP_TREE_KEY。

但失败两个以两种不同的方式启用它们:1)application.yml

  jackson:
         serialization:
             WRITE_DATES_AS_TIMESTAMPS: false
         deserialization:
              FAIL_ON_READING_DUP_TREE_KEY: true
Run Code Online (Sandbox Code Playgroud)

2)将它们添加为配置Bean

@Configuration
public class JacksonConfiguration {

    @Autowired
    private ObjectMapper objectMapper;

    @PostConstruct
    private void configureObjectMapper() {
        objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT );
        objectMapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY );
    }
}
Run Code Online (Sandbox Code Playgroud)

这两种方式都没有给我带来预期的效果。您能建议正确的方法吗?

Mak*_*kin 5

我尝试对 FasterXml Jackson 使用两个选项:

\n\n
    \n
  1. ACCEPT_EMPTY_STRING_AS_NULL_OBJECT 自动将空\n字符串映射到空值。根据https://github.com/FasterXML/jackson-databind/issues/1563 的说法,它似乎无法正常工作。说法,jet\n看起来它无法正常工作,所以我\n解决了编写自定义反序列化器的问题。
  2. \n
  3. FAIL_ON_READING_D\xe2\x80\x8c\xe2\x80\x8bUP_TREE_KEY 启用严格 JSON 验证,但我通过 JsonParser.Feature.STRICT_DUPLICATE_DETECTION 获得了所需的效果。
  4. \n
\n\n

所以现在我最终得到了两个可行的解决方案:

\n\n
 @Bean\n    public ObjectMapper objectMapper() {\n        final ObjectMapper objectMapper = new ObjectMapper();\n        objectMapper.registerModule(new JavaTimeModule());\n        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);\n        objectMapper.enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION);\n        return objectMapper;\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

和application.yml

\n\n
jackson:\n     serialization:\n         WRITE_DATES_AS_TIMESTAMPS: false\n     parser:\n          STRICT_DUPLICATE_DETECTION: true\n
Run Code Online (Sandbox Code Playgroud)\n\n

当然,我将使用 application.yml 来保持配置紧凑并集中在一处。

\n\n

感谢@Michal Foksa,我会接受你的答案,因为这是正确配置 ObjectMapper 的方法之一。

\n