Jackson不会自动将json对象中字段的复杂名称转换为dto对象。
我收到一个请求
@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);
...
谢啦
是什么影响了杰克逊不能正确使用复合词,尽管二传手和传接手都在场?
如何解决这个问题?
我认为我们不能谈论“影响”。我认为这是关于杰克逊的默认配置。如果你想要一种不同的行为,你要么使用@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 规范中缺失或错误的地方吗?