【发布时间】:2021-03-25 05:26:57
【问题描述】:
我想知道为什么spring boot可以通过Jackson的objectMapper反序列化没有默认构造函数的类,但是当我在单元测试中手动使用objectMapper时,它无法反序列化(com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造xxx 的实例(不存在像默认构造函数一样的创建者):无法从对象值反序列化(没有基于委托或属性的创建者)
)。
这是我的控制器:
@PostMapping("/precise")
public Resp<List<MatchedOutLineResponseDTO>> getPreciseMatchedOutLine(
@RequestBody List<MatchedOutLineRequestDTO> request)
这是我的pojo:
@Getter
public class MatchedOutLineRequestDTO {
private String uuid;
private JSONObject outLineGeometry;
public MatchedOutLineRequestDTO(String uuid, JSONObject outLineGeometry) {
this.uuid = uuid;
this.outLineGeometry = outLineGeometry;
}
}
谁能告诉我原因?
【问题讨论】:
-
您是要序列化(从对象转换为 JSON)还是要反序列化(从 JSON 转换为对象)
-
这不是很清楚。请提供minimal reproducible example。对于@SunitChatterjee 的观点,你为什么要使用两个 JSON 库?
-
JSON 请求和有问题的单元测试会很有用。
-
@SotiriosDelimanolis 我认为他的应用程序正在使用 Spring Boot 自动提供的 Object Mapper 库。但是,当他编写单元测试时,Spring Boot 库不可用。所以他可能会在单元测试中直接创建和使用 ObjectMapper
-
@SunitChatterjee 是的,你是对的。我在单元测试中直接使用 objectMapper。
标签: java spring-boot jackson json-deserialization