我为同一个实体使用多个数据传输对象(DTO)。
例如,我的实体:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity(name = "users")
public class User {
@Id //(with uuid generator)
private UUID id;
private String firstName;
private String lastName;
private String password;
private String phoneNumber;
private Attachment photo;
}
问题在于请求和响应不同。例如,要注册,用户必须输入
firstName
,lastName
,password
和phoneNumber
,但不包括id
和photo
(文件)。我写了另一个处理附件的API。我以以下方式返回用户:
{
"id": "c37f5b13-0698-41c8-a439-212484935567",
"firstName": "John",
"lastName": "Doe",
"phoneNumber": "123456789",
"photoUrl": "/api/attachment/3ac27460-1c60-11ec-9621-0242ac130002"
}
我的DTO:
public class UserDto {
@Data
public static class SignUpParams {
private String firstName;
private String lastName;
private String password;
private String phoneNumber;
}
@Data
public static class SignInParams {
private String password;
private String phoneNumber;
}
@Data
public static class ResponseParams {
private UUID id;
private String firstName;
private String lastName;
private String phoneNumber;
private String photoUrl;
}
@Data
public static class BlaParams {
// Just the fields I want
}
}
我认为这种方法不会返回不必要的null值,并且不会显示在Swagger Api文档中。
使用嵌套类作为DTO的做法是否正确并符合最佳实践?还是存在其他更好的选择?
@Entity
实际上也是一个DTO,但仅适用于JPA范围。 - terrorrussia-keeps-killing