【问题标题】:How do I reuse multiple DTOs (spring boot)如何重用多个 DTO(spring boot)
【发布时间】:2021-07-19 10:13:08
【问题描述】:

我是一名想使用spring实现api服务器的学生。

目前,我使用每个 api 的请求和响应。 (如果存在用于登录的api,我创建了AccountSignInDto.Request,AccountSignInResponse。)但是,我觉得重复代码越来越多。

我想知道如何重用多个 dto 以减少重复代码。

详情如下。

  • AccountCreateDto.java
  • AccountFindIdByEmailDto.java
  • AccountFindPasswordDto.java
  • AccountReadDto.java
  • AccountSignInDto.java
  • AccountUpdateDto.java
  • QuestionReadDto.java
package com.se.apiserver.v1.account.application.dto;

import com.se.apiserver.v1.account.domain.entity.AccountType;

import javax.validation.constraints.Email;
import javax.validation.constraints.Size;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;

public class AccountCreateDto {

  @Data
  @NoArgsConstructor
  @AllArgsConstructor
  @ApiModel("signIn request")
  @Builder
  static public class Request {

    @ApiModelProperty(example = "account", notes = "id")
    @Size(min = 4, max = 20)
    private String id;

    @ApiModelProperty(example = "password", notes = "password")
    @Size(min = 8, max = 20)
    private String password;

    @ApiModelProperty(example = "name", notes = "name")
    @Size(min = 2, max = 20)
    private String name;

    @ApiModelProperty(example = "nickname", notes = "nick-name")
    @Size(min = 2, max = 20)
    private String nickname;

    @ApiModelProperty(example = "11110000", notes = "stu-num")
    @Size(min = 8, max = 20)
    private String studentId;

    @ApiModelProperty(example = "STUDENT", notes = "account type")
    private AccountType type;

    @ApiModelProperty(example = "01012345678", notes = "phone-number, 00011112222")
    @Size(min = 10, max = 20)
    private String phoneNumber;

    @ApiModelProperty(example = "abc@def.com", notes = "email")
    @Email
    private String email;

    @ApiModelProperty(example = "1", notes = "question number")
    private Long questionId;

    @ApiModelProperty(example = "region", notes = "answer")
    @Size(min = 2, max = 100)
    private String answer;


  }

  @Data
  @AllArgsConstructor
  @ApiModel("signIn response")
  static public class Response {

    @ApiModelProperty(example = "1", notes = "account pk")
    private Long id;
  }

}

对不起,我的英语很差。 提前致谢!

【问题讨论】:

    标签: java spring-boot dto


    【解决方案1】:

    尝试将Request 声明为抽象类,所有其他dto 扩展Request。如下代码所示:

    public abstract class Request {
    
        @ApiModelProperty(example = "account", notes = "id")
        @Size(min = 4, max = 20)
        private String id;
    
        @ApiModelProperty(example = "password", notes = "password")
        @Size(min = 8, max = 20)
        private String password;
         
        ...
    }
    
    
    public class AccountCreateDto extends Request {
    
    }
    
    public class AccountUpdateDto extends Request {
    
    }
    

    这个例子忽略了龙目岛的影响。

    【讨论】:

      猜你喜欢
      • 2021-02-10
      • 1970-01-01
      • 2022-08-12
      • 2016-03-08
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多