当调用objectMapper.convertValue(cityEntity, City.class))时会发生此错误。
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Builder类 com.example.PostgresApp.dto.City$Builder 没有生成方法(名称:' build ')
package com.example.PostgresApp.dto;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import lombok.*;
import org.apache.commons.lang3.StringUtils;
@Value
@Builder(builderClassName = "Builder")
@JsonDeserialize(builder = City.Builder.class)
public class City {
String name;
String description;
@JsonPOJOBuilder(withPrefix = StringUtils.EMPTY)
public static class Builder {
}
}调用repo的服务似乎是引发异常的地方。
public List<City> getCities(){
return cityRepo.findAll().stream().map(cityEntity -> objectMapper
.convertValue(cityEntity, City.class))
.collect(Collectors.toList());
}发布于 2022-05-24 03:47:10
问题是Jackson不能反序列化对象值。
我的解决方案是向我的类添加以下注释:
// constructor with no args
@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE)
// constructor with all args
@AllArgsConstructor
// ignore unknown properties during deserialization
@JsonIgnoreProperties(ignoreUnknown = true)我的课最后看起来是这样的:
@Getter
@Builder
@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE)
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyClass {
private boolean flag;
private boolean flag2;
private MyClassA objectA;
private MyClassB objectB;
}如果您想阅读更多关于为什么我们应该同时使用@NoArgsConstructor和@AllArgsConstructor的文章,here is a good answer。
发布于 2021-07-08 17:30:59
您确定始终将名称和描述传递给类生成器吗?
我得到了同样的错误,在我的例子中,我试图使用生成的Builder来创建一个对象,但是我没有传递所有的参数,所以生成的方法不是spring想要的。它在搜索N+1参数方法,但我只传递了N个参数。在这种情况下,它将查找另一个无法找到的方法签名。
https://stackoverflow.com/questions/68196324
复制相似问题