一個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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM