DTO数据传输对象详解 |
您所在的位置:网站首页 › 实体模式是什么 › DTO数据传输对象详解 |
文章目录
一、DTO是什么?二、DTO解决的问题三、代码演示
一、DTO是什么?
DTO (数据传输对象) 数据传输对象(DTO),是一种设计模式之间传输数据的软件应用系统。数据传输目标往往是数据访问对象从数据库中检索数据。数据传输对象与数据交互对象或数据访问对象之间的差异是一个以不具有任何行为除了存储和检索的数据(访问和存取器)。 简单了说:假设你数据库中定义了User类,包含用户名、密码、邮箱、手机号等等;当用户登录时一般只需要输入用户名和密码,那么传入服务端的用户名和密码就可以在controller层封装到UserDto实体类中 二、DTO解决的问题DTO解决了在客户端和服务器端之间传递大量数据的问题,但是客户端往往需要更细粒度的数据访问 三、代码演示 @RestController public class AccountController { @Autowired private UserService userService; @Autowired private JwtUtil jwtUtil; @PostMapping("/login") //使用LoginDto接收前端登录时校验的用户名和密码 public Result login(@Validated @RequestBody LoginDto loginDto, HttpServletResponse response) { // User user = userService.getOne(new QueryWrapper().eq("username", loginDto.getUsername())); // Assert.notNull(user,"用户不存在!"); // if (!user.getPassword().equals(SecureUtil.md5(loginDto.getPassword()))) //{ // return Result.fail("密码不正确!"); // } // String jwt = jwtUtil.generateToken(user.getId()); // response.setHeader("Authorization",jwt); // response.setHeader("Access-control-Expost-Headers","Authorization"); // return Result.success(MapUtil.builder().put("id",user.getId())); } }LoginDto @Data public class LoginDto implements Serializable { @NotBlank(message = "用户名不能为空!") private String username; @NotBlank(message = "密码不能为空!") private String password; }User类 @Data @EqualsAndHashCode(callSuper = false) @TableName("m_user") public class User implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; @NotBlank(message = "昵称不能为空~") private String username; private String avatar; @NotBlank(message = "邮箱不能为空~") @Email(message = "邮箱格式不正确~") private String email; private String password; private Integer status; private LocalDateTime created; private LocalDateTime lastLogin; } |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |