우선 간단한 게시판을 만들고 있는데
이전에 배운 validation 체크를 해보려고 한다.
방법은 매우 간단다하다.
우선 부트스트랩 기능을 적극 이용할 예정이다.
벨리데이션체크하는 방법은
크게 두가지가 있는데
첫번째는 model 객체에 vaild를 사용하여
@Size 등 어노테이션을 이용하는 것이다.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@NotNull
@Size(min = 2,max = 30 , message = "제목은 2자이상 30자 이하 입니다.")
private String title;
@NotNull
@Size(min = 1, message = "내용을 입력해주세요.")
private String content;
한다면 이와 같이 정의 할 수 있다.
<div class="form-group">
<label for="title">제목</label>
<input type="text" class="form-control" th:classappend="${#fields.hasErrors('title')} ? 'is-invalid'" id="title" th:field="*{title}" >
<div class="invalid-feedback" th:if="${#fields.hasErrors('title')}" th:errors="*{title}">
제목 에러메시지
</div>
</div>
<div class="form-group">
<label for="content">내용</label>
<textarea class="form-control" id="content" rows="3" th:field="*{content}" th:classappend="${#fields.hasErrors('content')} ? 'is-invalid'"></textarea>
<div class="invalid-feedback" th:if="${#fields.hasErrors('content')}" th:errors="*{content}">
내용 에러메시지
</div>
그 후 타임리프 th:if ="fields.haserrors"로에러가 있다면 에러 메시지를 반환한다.
보시다시피 #fields.hasErrors(...) 함수는 매개변수(datePlanted)로 필드 표현식을 수신하고 해당 필드에 유효성 검사 오류가 있는지 여부를 알려주는 부울 값을 반환합니다. 또한 해당 필드에 대한 모든 오류를 얻고 반복할 수 있습니다.
타임리프 공식홈페이지 발췌
그 classAppend로 클래스를 추가해 준다.
is-invalid
추가해 주면 된다.
두번째 방법을 알아보자
import org.thymeleaf.util.StringUtils;
@Component
public class BoardVaildator implements Validator{
@Override
public boolean supports(Class<?> clazz) {
return Board.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
Board board = new Board();
if(StringUtils.isEmpty(board.getContent())){
errors.rejectValue("content", "key" ,"내용을 입력하세요");
}
}
}
이 방법은 벨리데이션 메소드를 만들어 서비스와 같이 동작을 하게된다.
@PostMapping("/form")
public String greetingSubmit(@Valid Board board, BindingResult bindingResult){
// vaildator.validate(board,bindingResult);
if(bindingResult.hasErrors()){
return "board/form";
}
boardRepository.save(board);
return "redirect:/board/list";
}
}
form에 전달될때 validator로 검증을 하면 위와 같이 동작한다.
1번의 경우는 간단하지만 세밀한 조정이 어렵다.
2번 같은경우는 세밀한 조정이 가능하지만 클래스를 하나 더 만들어야 한다.
'Spring Boot > Restful-Api + Spring Boot' 카테고리의 다른 글
스프링 시큐리티를 이용한 로그인 처리 (0) | 2022.06.18 |
---|---|
스프링 시큐리티를 이용한 회원가입 처리 (0) | 2022.06.18 |
Restful-API연습 (10) REST API Monitoring을 위한 Actuator 설정 (0) | 2022.06.12 |
RestFul API 연습(9) Swagger 사용 (0) | 2022.06.04 |
RestFul API 연습(8) Rest api 구현을 위한 HATEOAS 적용 (0) | 2022.06.04 |