jackson 错误:(不存在创建者,如默认构造):将字符串反序列化为Object时,无法从Object值反序列化

33qvvth1  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(126)

我正在学习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)
fsi0uk1n

fsi0uk1n1#

错误Cannot construct instance of 'test.model.CreateUser' (no Creators, like default construct, exist)意味着你需要no-args构造函数。
只需将lombok注解@NoArgsConstructor添加到class即可解决您的问题。

相关问题