Spring

Spring @Valid와 BindingResult 파라미터

keepgoing 2021. 12. 21. 20:20

@Valid

필드 값을 기본 값으로 가져가고 싶을 때, Controller에 @Valid 어노테이션을 선언할 수 있다.

//@Valid 예시
@PostMapping("/members/new")
    public String create(@Valid MemberForm form){

        Address address = new Address(form.getCity(), form.getStreet(), form.getZipcode());

        Member member = new Member();
        member.setName(form.getName());
        member.setAddress(address);

        memberService.join(member);
        return "redirect:/";
    }
//NotEmpty Valid
    @NotEmpty(message = "회원 이름은 필수 입니다.")
    private String name;

만약 위와 같이 선언했는데, 폼에서 이름을 입력하지 않는다면 에러를 발생시킨다.


BindingResult 파라미터

//BindingResult 파라미터 예시
@PostMapping("/members/new")
    public String create(@Valid MemberForm form, BindingResult result){

        if(result.hasErrors()){
            return "members/createMemberForm";
        }

        Address address = new Address(form.getCity(), form.getStreet(), form.getZipcode());

        Member member = new Member();
        member.setName(form.getName());
        member.setAddress(address);

        memberService.join(member);
        return "redirect:/";
    }

위는 BindingResult 파라미터를 이용해 만약 에러가 발생한다면 "members/createMemberForm" 화면으로 넘어가도록 설정해준것이다.