포트폴리오 서비스(DTO로 List<Object> 입력 및 Valid)

·2024년 5월 24일
0

Portfolio Backtest

목록 보기
27/31

DTO를 사용하여 입력받는 이유

  • 다음과 같이 사용자 입력이 동적으로 변하는 경우를 처리할 수 있다.
  • DTO를 사용하면 어떤 입력이 들어오는지 명확하게 확인하고 처리할 수 있다.

Spring에서 DTO를 처리하기

ModelAttribute

  • form 데이터를 가져와 바인딩하는 일종의 커맨드 함수
  • GET, POST에서 form 데이터를 가져와 사용가능

RequestBody

  • http, body의 json 내용을 받아와 역직렬화를 통해서 객체를 구성
  • POST 요청에서 body의 데이터를 가져옴

DTO 구성하고 Valid

In DTO LIST

    @PostMapping("")
    public String exa(@Valid @ModelAttribute List<BacktestDTO> backtestDTOList) {
        return "exa";
    }
  • 다음과 같이 구성한다면 Valid가 제대로 작동하지 않는다.
  • Spring MVC에서 Valid의 경우 handlerMapping 과정에서 ArgumentResolver를 거치면서 @Valid가 있는 경우 검증을 진행한다.
  • 즉, List에 대한 검증 조건이 존재하지 않기 때문에 오류가 발생한다.
public class BacktestInputDTO {
    private String startDate;
    private String endDate;
    @Positive
    private double startAmount;
    @Valid
    List<BacktestItemDTO> items;
    private int size;
}
  • 다음과 같은 방식으로 사용하여야 한다.

BindingResult bindingResult

  • bindingResult는 검증에서 오류가 발생하여도 Controller의 코드를 실행한다.
  • 단, 반드시 검증하는 객체 뒤에 위치해야함
    @PostMapping("")
    public String postBacktest(Model model, @Valid @ModelAttribute BacktestInputDTO backtestInputDTO, BindingResult bindingResult) {
    	if (bindingResult.hasErrors()) {
            return "backtest_portfolio";
        }
        return "backtest_portfolio";
    }

profile
백엔드 개발자가 꿈인 컴공과

0개의 댓글

관련 채용 정보