为了账号安全,请及时绑定邮箱和手机立即绑定

在 Java DTO 类上使用数据注释

在 Java DTO 类上使用数据注释

哈士奇WWW 2021-07-12 18:57:37
我在对 DTO 类使用数据注释时感到困惑。这是我的示例课程。@Datapublic class MyClass {   private Long id;   private String name;}我在网上读到,专门在 DTO 类上使用 Data 注释将允许使用生成的 setter 更改字段的值。我应该删除 lombok 数据注释吗?并手动实现 getter 和 setter。谢谢 :)
查看完整描述

3 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

我会避免在 DTO 中使用 @Data,因为它有太多陷阱。首先,正如您所提到的,它是可变的,您并不真正想要 DTO。尽管它是可变的,但它实现了 equals() 和 hashCode() 这只是自找麻烦。

您可以将 @Value 用于不可变的 DTO。对于传入的 DTO,您可能需要添加lombok.anyConstructor.addConstructorProperties到 lombok.config,这将允许像 jackson 这样的库在没有默认构造函数的情况下反序列化到您的 POJO。


查看完整回答
反对 回复 2021-07-14
?
湖上湖

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"}


查看完整回答
反对 回复 2021-07-14
  • 3 回答
  • 0 关注
  • 470 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信