zoukankan      html  css  js  c++  java
  • 一个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

  • 相关阅读:
    Java中读取.properties配置文件的通用类
    静态工厂方法中单例的延迟加载技术
    AVL树C++实现
    初探Java反射机制
    项目中一个 1 毫秒引发的问题
    用Java操作数据库Datetime数据
    【转】Linux中的EAGAIN含义
    【转】关于编译链接——gcc/g++
    《Linux多线程编程手册》读书笔记
    《Linux多线程服务端编程——使用muduo C++网络库》读书笔记
  • 原文地址:https://www.cnblogs.com/theRhyme/p/10529456.html
Copyright © 2011-2022 走看看