本文共 2275 字,大约阅读时间需要 7 分钟。
数据传输对象(DTO,Data Transfer Object)是一种在面向服务架构(SOA)设计中用于数据传输的设计模式。其核心作用是为了在分布式系统中实现客户端和服务端之间的数据传输,避免直接将敏感数据传递至业务逻辑层。
简单来说,假设你有一个 User 实体类,包含用户的基本信息(如用户名、密码、邮箱、手机号等);当用户登录时,通常只需要提供用户名和密码。服务端可以将这些传入的数据通过 LoginDto 实体类进行封装,从而避免直接将敏感数据传递至服务层。
DTO 模式解决了以下几个关键问题:
@RestControllerpublic class AccountController { @Autowired private UserService userService; @Autowired private JwtUtil jwtUtil; @PostMapping("/login") public Result login(@Validated @RequestBody LoginDto loginDto, HttpServletResponse response) { // 通过loginDto获取用户信息 User user = userService.getOne(new QueryWrapper ().eq("username", loginDto.getUsername())); 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())); }} @Datapublic class LoginDto implements Serializable { @NotBlank(message = "用户名不能为空!", name = "username") private String username; @NotBlank(message = "密码不能为空!", name = "password") private String password;} @Data@Table(name = "m_user")public class User extends BaseEntity { @TableId(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;} 通过以上实例可以看出,DTO 帮助我们在分布式系统中更好地处理数据传输问题,为系统设计和实现提供了更加灵活和安全的解决方案。
转载地址:http://huyiz.baihongyu.com/