首页 > 解决方案 > 同一实体的多个数据传输对象 (DTO)

问题描述

(对不起,我的英语不好)。我对同一个实体使用多个 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;
}

问题是请求和响应不一样。例如,要注册,用户必须输入firstNamelastNamepasswordphoneNumber。但不是idand 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 Docs 中。
将嵌套类用于 dtos 是否正确和最佳实践?还是有其他更好的选择?

标签: javaspring-bootdtodata-transfer-objects

解决方案


推荐阅读