Jackson 不会自动将复杂的字段名称从 json-object 转换为 dto-object

Jackson don't automatically convert complexy names of fields from json-object into dto-object

Jackson 不会自动将字段的复杂名称从 json-object 转换为 dto-object。

我收到了一个请求

 @PostMapping(path = "model/byFile")
public ResponseEntity<ModelDto>
    createModel(@RequestBody List<DataFileDto> modelList) {
}

public class DataFileDto {

   @NotNull
   String kyId;

    @NotNull
    String nameAs;

//default constructor

//getters and setter

//Builder

}

当json到达的时候,转换的时候,Jackson把值取出来只放在简单的词中,但是在复合词中写null。

为了避免这种情况,我必须使用 @JsonProperty("ky_id") 属性,我觉得这很不方便。该项目本身很旧。我不能在那里添加

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.12.0</version>
</dependency>

因为那样项目就会中断。

我还注意到那里设置了自定义 ObjectMapper 配置。

@Bean
  public ObjectMapper mapper() {
    var module = new SimpleModule();
    module.addSerializer(BigDecimal.class, new BigDecimalSerializer());

    var objectMapper = new ObjectMapper();
    objectMapper.registerModule(new JavaTimeModule());
    objectMapper.registerModule(module);
    objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS, true);
    return objectMapper;
  }

更新

我加了

...
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
...

谢谢

尽管存在 setter 和 getter,但 Jackson 无法正确使用复合词这一事实可能会受到什么影响?

如何解决这个问题?

我认为我们不能谈论“影响”。我认为这是关于杰克逊的默认配置。如果你想要不同的行为,你要么使用 @JsonProperty 注释,要么使用 objectMapper.setPropertyNamingStrategy(my strategy here).

进行全局配置