본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : Form 전송 객체 분리하여 개발하기

by 오주현 2022. 2. 17.
반응형

등록할 때 사용하는 검증과 수정할 때 사용하는 검증을 분리시켜 구현했다.

 

전에는 groups를 통해 분리를 해서 사용했지만 그렇게 사용할 경우 코드가 복잡해지기도 하고 내용이 많아지면 유지보수가 어려워진다는 문제가 있어서 이번에는 아예 분리를 했다.

 

현업에서도 이렇게 많이 사용을 한다고 한다.

@Data
public class ItemSaveForm {

    @NotNull
    @Max(value=9999)
    private Integer quantity;
}

먼저 ItemSaveForm라는 DTO(데이터 전송 객체)를 만들어 준다.

등록에서 사용한다.

 

@Data
public class ItemUpdateForm {

    @NotNull
    private Long id;

    // 수정에서는 수량은 자유롭게 변경할 수 있다.
    private Integer quantity;
}

이번에는 ItemUpdateForm이라는 DTO이다.

수정에서 사용한다.

 

두 DTO를 비교해보면 등록에서는 quantity에 제한이 있는데 수정에서는 제한이 없다.

 

이렇게 등록과 수정을 서로 다른 검증을 할 수 있는 것이다.

 

사용하기 위해서는 컨트롤러에 추가를 해줘야 하는데 아래와 같다.

 

public String addItem(@Validated @ModelAttribute("item") ItemSaveForm form

저장을 위해서는 Item 대신에 ItemSaveForm을 전달 받는다 그리고 Validation으로 검증도 수행하고 BindingResult로 검증 결과도 받는다.

 

주의할 점으로는 ModelAttribute에 item 이름을 넣어줘야 한다. 이것을 넣지 않으면 itemSaveForm이라는 이름으로 MVC Model에 담기게 되고 이렇게 되면 뷰 템플릿에서 접근하는 th:object의 이름도 바꿔줘야 한다.

 

Item item = new Item();
item.setItemName(form.getItemName());
item.setPrice(form.getPrice());
item.setQuantity(form.getQuantity());

그리고 마지막에 성공 로직을 위해서 form 객체를 Item 객체로 변환하는 과정을 거쳐야한다.

 

이렇게 Form 전송 객체를 분리해서 등록과 수정에 딱 맞는 기능을 구성하고 검증도 명확하게 분리했다.

 


스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.

반응형

댓글