implementation 'org.springframework.boot:spring-boot-starter-validation'
Name입력 필수
@Getter @Setter
public class MemberForm {
@NotEmpty(message = "회원 이름은 필수입니다.")
private String name;
private String city;
private String street;
private String zipcode;
}
@PostMapping("/members/new")
public String create(@Valid MemberForm form, BindingResult result) {
// 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:/";
}
message = "회원 이름은 필수입니다."
받아서 처리 -> 에러를 담아서 다시 회원가입 페이지 -> input 박스에 에러메세지 담기 - 에러 x : 'form-control'
- 에러 o : 'form-control fieldError'
<input type="text" class="form-control" placeholder="이름을 입력하세요" th:field="*{name}"
th:class="${#fields.hasErrors('name')}?'form-control fieldError':'form-control'" />
<p th:if="${#fields.hasErrors('name')}" th:errors="*{name}"></p>
👍 결과
@Transactional
public Long join(Member member){
// name 중복 체크 메소드 호출
validationMemberCheck(member);
memberRepository.save(member);
return member.getId();
}
@Service
// 호출시켜주는 곳에 예외라고 던져주는 것
private void validationMemberCheck(Member member) throws IllegalAccessException {
List<Member> findMembers = memberRepository.findByName(member.getName());
// findMembers가 비어있어야 정상, 비지 않았으면 exception
if( !findMembers.isEmpty() ) {
//exception 객체 생성 후 던지기
throw new IllegalAccessException("이미 존재하는 회원입니다.");
}
}
@Repository
// service단에 만들었던 예외 처리
public List<Member> findByName(String name) throws IllegalAccessException {
return em.createQuery("select m from Member where m.name = :name", Member.class)
.setParameter("name", name)
.getResultList();
}
@Controller
@PostMapping("/members/new")
public String create(@Valid MemberForm form, BindingResult result) throws IllegalAccessException {
....메소드....
}
@Service
@Transactional
public Long join(Member member) throws IllegalAccessException {
.... 메소드 ....
}
👍 결과
- 같은 이름 입력하면 was단 -> 500 error 발생
- 콘솔창 출력