• 一个JavaBean和DTO转换的优秀案例


    所有的JavaBean和DTO的互相转换接口,JavaBean转化成DTO或者DTO转换JavaBean:

    public abstract class Converter<A, B>  {
        protected abstract B doForward(A a);
        protected abstract A doBackward(B b);
    }

    一个JavaBean:

    import lombok.Data;
    import org.bson.types.ObjectId;
    import org.springframework.data.annotation.Id;
    import org.springframework.data.mongodb.core.mapping.Document;
    
    @Data
    @Document(collection = "user")
    public class User {
        @Id
        private ObjectId id;
    
        private String username;
        private String password;
    }

    对应的DTO,无参构造方法,以及全部参数方法of,以及私有静态内部类继承抽象类Convert并实现两个转换方法:

    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import org.springframework.beans.BeanUtils;
    import study.Converter;
    
    import javax.validation.constraints.NotNull;
    
    @NoArgsConstructor
    @AllArgsConstructor(staticName = "of")
    @Data
    public class UserDTO {
        /**
         * AllArgsConstructor注解和NotNull注解配合使用,参数不为null
         */
        @NotNull(message = "username is null")
        private String username;
        @NotNull(message = "password is null")
        private String password;
    
        public User convertToUser(){
            UserDTOConvert userDTOConvert = new UserDTOConvert();
            User convert = userDTOConvert.doForward(this);
            return convert;
        }
    
        public UserDTO convertFor(User user){
            UserDTOConvert userDTOConvert = new UserDTOConvert();
            UserDTO convert = userDTOConvert.doBackward(user);
            return convert;
        }
    
        private static class UserDTOConvert extends Converter<UserDTO, User> {
            @Override
            protected User doForward(UserDTO userDTO) {
                User user = new User();
                BeanUtils.copyProperties(userDTO,user);
                return user;
            }
    
            @Override
            protected UserDTO doBackward(User user) {
                UserDTO userDTO = new UserDTO();
                BeanUtils.copyProperties(user,userDTO);
                return userDTO;
            }
        }
    }

    Controller中一个方法接受DTO参数,使用注解@Valid配合DTO属性上注解@NotNull使用;

    接受参数,持久化,返回对象,如此优雅。

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    
    import javax.validation.Valid;
    
    @RestController
    @RequestMapping(value = "/api/user")
    public class UserController {
    
        @Autowired
        private UserService userService;
    
        @PostMapping
        public UserDTO addUser(@Valid UserDTO userDTO){
            User user = userDTO.convertToUser();
    
    
            User addUser = userService.addUser(user);
    
            UserDTO result = userDTO.convertFor(addUser);
            return result;
        }
    }

    来源:

    https://www.itcodemonkey.com/article/6309.html?tdsourcetag=s_pctim_aiomsg

  • 相关阅读:
    ERRORCODE=4228, SQLSTATE=null
    DB2和Oracle中唯一约束和唯一索引对比
    SW 3D 样条曲线
    SW 快速操作
    spring依赖注入的方式(一)
    Oracle Connect By的用法
    转:min(x,y)高效算法
    【转】QQ盗号核心编程
    转:理解并解决GBK转UTF8奇数中文乱码
    Oracle数据库的导入和导出命令
  • 原文地址:https://www.cnblogs.com/theRhyme/p/10529456.html
Copyright © 2020-2023  润新知