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

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

方安怡
2023-03-14

Jackson不会自动将json对象中字段的复杂名称转换为dto对象。

我收到一个请求

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

  • dto
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);
...

谢啦

是什么影响了杰克逊不能正确使用复合词,尽管二传手和传接手都在场?

如何解决这个问题?

共有1个答案

岳锦
2023-03-14

我认为我们不能谈论“影响”。我认为这是关于杰克逊的默认配置。如果你想要一种不同的行为,你要么使用@JsonProperty注释,要么使用objectMapper进行全局配置。SetPropertyNamegstrategy(我在这里的策略)

 类似资料:
  • 我正在尝试将复杂的实体转换为Dto。我想从DTO中删除实体中的一些值。 我的实体看起来像这样(为了简单起见,省略了实体的大部分): 我找到了一个对简单实体非常有效的解决方案:将实体转换为数据。如果我采纳了自定义拦截器的建议,删除id或整个item属性就可以了。 我尝试了两种方法来定义我的DTO: < li >它仅返回id和整个项目。 现在的问题是我只想删除 item 属性中的某些值。例如,私有字段

  • 问题内容: 有一个简单的方法来改变,这样 (就可以了太)。我可以做一个case语句,但是肯定有一个要转换的函数吗?编辑:我希望我可以接受多个答案,因为你们两个基本上给了我我所需的力量。 这将给出的数值。谢谢! 问题答案: 是, 将月份格式化为其数字表示形式。

  • 问题内容: 我正在用PHP开发Web应用程序, 我需要将许多对象作为JSON字符串从服务器传输,是否存在用于PHP的任何库,以将对象转换为JSON,并将JSON字符串转换为Objec,例如Java的Gson库。 问题答案: 这应该可以解决问题! 这是一个例子 如果您希望输出为数组而不是对象,则传递给 有关json_encode()的更多信息 另请参阅:json_decode()

  • 问题内容: Jackson json注释中以下jax-b注释的等效方式是什么? 我需要生成json而不是xml,并且需要了解在jax-b中等效表示的常规jackson批注。 重命名字段。 使用getter代替字段。 如果json / xml元素名称是Java保留字(例如“ ”,“ ”,“ ”等),则这些功能尤其重要。 因此我们必须将POJO字段分别命名为“ new ”,“ _ public ”,“

  • 我正试图用jackson-core-2.9.6把我的json转换成地图。我的json是 我试图将JSON解析成Map的Java代码是这样的 我得到的异常是com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造(尽管至少存在一个Creator):没有String参数构造函数/工厂方法可以从[源:(String)“”{\r\n“

  • 我希望Jolt将一个复杂的json转换为下面所需的json。 输入JSON: 输出量的希望值 我试过遵循Jolt Spec 但得到了以下输出 因此,正如所见,除了最后一个级别值之外,所有其他值都具有具有重复值的数组。任何人都可以帮助解决 Jolt 规范中缺失或错误的地方吗?