gwooden_코린이

스프링 부트 유효성 검사 본문

스프링 부트

스프링 부트 유효성 검사

gwooden22 2023. 2. 15. 09:35
728x90

어노테이션으로 간편하게 유효성 검사를 해준다.


 

@NotEmpty(message = "보여줄 메세지 입력")
@Size(max = 100) //최대 100바이트 까지 허용 가능 min도 있음
package com.example.sb.question;

import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class QuestionForm {
	
	@NotEmpty(message = "제목을 입력하세요.")
	@Size(max = 200)
	private String subject;
	
	@NotEmpty(message = "내용을 입력하세요.")
	private String content;

}

@Valid QuestionForm : html에서 입력한 내용이 객체 저장된다.

BindingResult : 검사한 결과를 저장하는 객체

 

	@GetMapping("/create")
	public String questionCreate(QuestionForm questionForm) {
		return "question_form";
	}
	
	@PostMapping("/create")
	 public String questionCreate(@Valid QuestionForm questionForm, BindingResult bindingResult) {
	      
	    if(bindingResult.hasErrors()) {
	       return "question_form";
	    }
	      
	    //입력한 질문제목과 내용을 Question 테이블에 추가 하는 코드
	    questionService.create(questionForm.getSubject(), questionForm.getContent());
	      
	    return"redirect:/question/list";
	 }

 

 

<html layout:decorate="~{layout}">
<div layout:fragment="content" class="container">
    <h5 class="my-3 border-bottom pb-2">질문등록</h5>
    <form th:action="@{/question/create}" th:object="${questionForm}" method="post">
		
		<div class="alert alert-danger" th:if="${#fields.hasAnyErrors()}">
			
			<div th:each="err : ${#fields.allErrors()}" th:text="${err}"></div>
			
		</div>
		
        <div class="mb-3">
            <label for="subject" class="form-label">제목</label>
            <input type="text"  id="subject" th:field="*{subject}" class="form-control">
        </div>
        <div class="mb-3">
            <label for="content" class="form-label">내용</label>
            <textarea  id="content" th:field="*{content}" class="form-control" rows="10"></textarea>
        </div>
        <input type="submit" value="저장하기" class="btn btn-primary my-2">
    </form>
</div>
</html>

폼 태그에 th:object=""를 사용하고 인풋태그에 name 속성 없이 입력값을 처리할 수 있다. 이때 인풋태그에는 th:field를 같이 사용해 주면된다. 오브젝트와 필드 이 2가지를 같이 사용해야 가능하

728x90
Comments