3 回答
TA贡献1155条经验 获得超0个赞
我会避免在 DTO 中使用 @Data,因为它有太多陷阱。首先,正如您所提到的,它是可变的,您并不真正想要 DTO。尽管它是可变的,但它实现了 equals() 和 hashCode() 这只是自找麻烦。
您可以将 @Value 用于不可变的 DTO。对于传入的 DTO,您可能需要添加lombok.anyConstructor.addConstructorProperties
到 lombok.config,这将允许像 jackson 这样的库在没有默认构造函数的情况下反序列化到您的 POJO。
TA贡献2003条经验 获得超2个赞
DTO是用来传输数据信息的,有些信息其实是我们不希望用户能够更改或访问的,比如用户密码,我们不想在用户看到加密后的密码时传递给前端,或者我们不希望用户在更改信息时修改密码,在这个序列化过程中起作用的是setter和getter,以及自动为所有字段生成getter和setter的数据注释。
例如
@Data
class User{
private String userName;
private String pwd;
}
这个类,将有所有的 setter 和 getter。当你转换到网络时,你会看到
{userName: "123", pwd: "xxx"}
这很糟糕。但是如果你使用 DTO
class User{
private String userName;
private String pwd;
public String getUserName(){
return userName;
}
}
他们只看到
{userName: "123"}
添加回答
举报