Controller(+ @Valid)
Controller: 웹 계층, Client의 요청을 받는 부분
MemberController
@Controller
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
@GetMapping("/members/new")
public String createForm(Model model) {
model.addAttribute("memberForm", new MemberForm());
return "members/createMemberForm"; // templates/members/createMemberForm.html 랜더링
}
@PostMapping("/members/new")
public String saveForm(@Valid MemberForm memberForm, BindingResult result) {
/**
* 1. @Valid를 통해 오류가 없는 지 확인 -> ex: MembeForm에서 name을 필수이므로 @NotEmpty 애노테이션 추가하고, name의 값이 empty인지 아닌지 확인
* 2. If name이 emtpy이면, @Valid에서 오류를 던짐 & BindingResult에 오류가 들어감
* 3. createMemberForm.html의 fields.hasError('name')에 오류 & message가 대입 됨
* (더 자세한 내용은 SpringMVC2 Validation 부분 참고)
*/
if (result.hasErrors()) {
return "members/createMemberForm";
}
Address address = new Address(memberForm.getCity(), memberForm.getStreet(), memberForm.getZipcode());
Member member = Member.createMember(memberForm.getName(), address);
memberService.join(member);
return "redirect:/"; // templates/members/createMemberForm.html 랜더링
}
@GetMapping("/members")
public String getMembers(Model model) {
List<Member> members = memberService.findMembers();
model.addAttribute("members", members);
return "members/memberList";
}
}
MemberForm
@Getter
@Setter
public class MemberForm {
@NotEmpty(message = "회원 이름은 필수 입니다.")
private String name;
private String city;
private String street;
private String zipcode;
}
Client 쪽에서 회원가입하는 Member의 Form 데이터를 서버로 보낼때, 해당 데이터들을 MemberForm에 담아서 서버에서 처리합니다.
@Valid를 통해 MemberForm를 validate 합니다. @Valid 애노테이션이 있으면, MemberForm에서 @NotEmpty,@NotBlank 등등 애노테이션이 붙어있는 속성들을 확인하고, 애노테이션을 만족하는지 확인합니다. 만약 만족하지 않으면, BindingResult에 error가 담기고, BindingResult를 client에 보내서 오류를 표시하도록 할 수 있습니다.
예제에서는, MemberForm의 name에 @NotEmpty가 붙어 있는데, 만약에 client에서 보낸 form 데이터에 name값이 없으면 해당 error가 BindingResult에 담겨서 client 쪽으로 보내지며 , message "회원 이름은 필수 입니다."를 랜더링 하도록 할 수 있습니다.
(값을 validate할 수 있는 방법은 다양하며, 더 자세한건 앞서 학습했던 Spring_MVC2의 validataion을 참고하시면 됩니다.https://github.com/k-ms1998/Spring-studies)
Author And Source
이 문제에 관하여(Controller(+ @Valid)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@k_ms1998/Controller-Valid저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)