使用生成器映射对象时,java定义无效
我正在通过rest模板在Spring中进行rest调用
如果我用来映射的对象使用Lombok的Getter/Setter,那么一切都正常
但是如果我使用一个构建器,它会因为一个InvalidDefinitionException错误而中断
如果我按照错误添加构造函数,它就可以工作了
但我正在努力避免它。我只是想让这些场地最终完工,让建筑商来处理施工
我可以得到一些建议,我可以如何绕过这个问题,或者如果这是预期的,不能简单地坚持使用只是建设者,确实需要建设者?谢谢
以下编译很好,但当我进行rest调用时,会出现以下错误:
InvalidDefinitionException: Cannot construct instance of
my.package.Genre
(no Creators, like default constructor, exist): cannot deserialize from Object value
@Builder
@Getter
public class Genre {
private long id;
private String name;
}
失败的rest调用
return restTemplate.exchange(url, HttpMethod.GET, entity, Genre.class, params);
使用Setter时将通过以下步骤。使用上面相同的rest调用进行测试
@Getter
@Setter
public class Genre {
private long id;
private String name;
}
或者,如果我添加了构造函数,那么下面的方法也会起作用
如果这是必须的,我会选择坚持二传。做建议
@Builder
@Getter
public class Genre {
private long id;
private String name;
public Genre() {
}
public Genre(long id, String name) {
this.id = id;
this.name = name;
}
}
# 1 楼答案
这应该行得通
TDLR@如果没有定义其他构造函数,生成器将隐式创建所有参数构造函数。通常由编译器自动添加的参数构造函数不会被添加。在这种情况下,RestTemplate不需要参数构造函数。所以我们加上一个
# 2 楼答案
从Lombok 1.18.16开始,您可以使用
@Jacksonized
自动生成Jackson使用Lombok@(Super)Builder
所需的所有内容:对于Lombok的早期版本,您必须按如下方式自定义生成器: