在 Java DTO 类上使用数据注释

我在对 DTO 类使用数据注释时感到困惑。这是我的示例课程。


@Data

public class MyClass {

   private Long id;

   private String name;

}

我在网上读到,专门在 DTO 类上使用 Data 注释将允许使用生成的 setter 更改字段的值。


我应该删除 lombok 数据注释吗?并手动实现 getter 和 setter。


谢谢 :)


哈士奇WWW
浏览 472回答 3
3回答

白衣非少年

我会避免在 DTO 中使用 @Data,因为它有太多陷阱。首先,正如您所提到的,它是可变的,您并不真正想要 DTO。尽管它是可变的,但它实现了 equals() 和 hashCode() 这只是自找麻烦。您可以将 @Value 用于不可变的 DTO。对于传入的 DTO,您可能需要添加lombok.anyConstructor.addConstructorProperties到 lombok.config,这将允许像 jackson 这样的库在没有默认构造函数的情况下反序列化到您的 POJO。

湖上湖

DTO是用来传输数据信息的,有些信息其实是我们不希望用户能够更改或访问的,比如用户密码,我们不想在用户看到加密后的密码时传递给前端,或者我们不希望用户在更改信息时修改密码,在这个序列化过程中起作用的是setter和getter,以及自动为所有字段生成getter和setter的数据注释。例如@Dataclass User{private String userName;private String pwd;}这个类,将有所有的 setter 和 getter。当你转换到网络时,你会看到{userName: "123", pwd: "xxx"}这很糟糕。但是如果你使用 DTOclass User{private String userName;private String pwd;public String getUserName(){    return userName;}}他们只看到{userName: "123"}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java