티스토리 뷰

 

DTO 와  ModealMapper 는 왜 사용되는 걸까?

 

DTO(Data Transfer Object)는 DB Table에서 숨기고 싶은 정보가 있을 때 (예로 User의 Id)그 정보들은 제외하고 나머지 Column들만 따로 빼내서 객체 전송을 위해 만든 Object이다. 이렇게되면 다른 사용자는 중요한 정보에 접근할 수가 없게된다.  그러나 이렇게 했을때  DTO는 Database Table이 아니기 때문에 Database 와의 연결을 해줘야하는대 그때 사용되는 것이 ModelMapper 이다. ModelMapper 를 이용해 DB Table 과 DTO를 계속 convert할 수 있게된다.

 

 

ModelMapper 사용예제

main에서 bean을 먼저주입

import org.modelmapper.ModelMapper;
 
import javax.annotation.PostConstruct;
 
@SpringBootApplication
public class DemoApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
 
    @Bean
    public ModelMapper modelmapper(){
        return new ModelMapper();
    }
}
 

 

 

Controller에서 값이 변하지 않으니 final 로 선언. 

객체를 생성해주는 map 메서드를 이용해서 DTO를 DB와 연결할 수 있게 해준다.

public class TravelController {
 
    private final ModelMapper modelMapper;
 
    @Builder
    public TravelController(ModelMapper modelMapper, TravelService travelService){
        this.modelMapper = modelMapper;
        this.travelService = travelService;
    }
 
    @PostMapping
    public ResponseEntity saveTravel(@RequestBody @Valid TravelDto travelDto, Errors errors){
        if (errors.hasErrors()){ return ResponseEntity.badRequest().body(errors); }
 
        //map메서드가 객체를 생성해주기 때문에 new필요없다. 
        //DTO를 model class로 변경
        Travel travel = modelMapper.map(travelDto, Travel.class);
        Travel createTravel = travelRepository.save(travel);
 
        return ResponseEntity.ok().body(createTravel);
    }
 

 

 

 

 

 

Reference 

https://coding-start.tistory.com/151

'Spring Boot' 카테고리의 다른 글

Injecting beans using constructor  (0) 2019.03.17
Id type은 왜 Long 일까  (0) 2019.03.10
Constructor Injection  (0) 2019.03.08
ModelMapper DTO-entity conversion  (0) 2019.03.08
Creating Spring Boot application with IntelliJ II  (0) 2019.02.27