我正在学习restAssured并尝试使用Jackson和lombok注解。我为请求和响应模型创建了以下类
@Data
@Builder
@AllArgsConstructor
public class CreateUser {
private String job;
private String id;
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Timestamp createdAt;
在下面的方法中,我尝试使用对象createUser作为请求体进行POST调用,并将响应字符串反序列化为对象并返回。
public static CreateUser createUser(String name, String job) throws IOException {
CreateUser createUser = CreateUser.builder()
.name(name)
.job(job)
.build();
String jsonResponse = given()
.when()
.baseUri(baseUri)
.contentType(ContentType.JSON)
.body(createUser)
.post("/users")
.body()
.asString();
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(jsonResponse, CreateUser.class);
}
我得到下面的异常
Cannot construct instance of `test.model.CreateUser` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (String)"{"job":"leader","id":"398","name":"morpheus","createdAt":"2023-07-10T18:04:35.486Z"}"; line: 1, column: 2]
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `test.model.CreateUser` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (String)"{"job":"leader","id":"398","name":"morpheus","createdAt":"2023-07-10T18:04:35.486Z"}"; line: 1, column: 2]
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67)
at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1452)
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1028)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1297)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:326)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4014)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3005)
1条答案
按热度按时间fsi0uk1n1#
错误
Cannot construct instance of 'test.model.CreateUser' (no Creators, like default construct, exist)
意味着你需要no-args构造函数。只需将lombok注解
@NoArgsConstructor
添加到class即可解决您的问题。