sm 기술 블로그
[스프링부트] 입력 값 검증, 에러 메시지 표시 본문
Form
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
@Getter
@Setter
public class QuestionForm {
@NotEmpty(message = "제목은 필수항목 입니다.")
@Size(max = 200)
private String subject;
@NotEmpty(message = "내용은 필수항목 입니다.")
private String content;
}
유효성 검사를 진행해 준다.
제목과 내용이 비어있다면, 에러를 발생시킬 것이다.
문자열에는 notempty를 , 정수형에는 notnull을 작성해야 한다.
Controller
import com.mysite.shoppingMall.Ut.IsLogined;
import com.mysite.shoppingMall.Entity.Question;
import com.mysite.shoppingMall.Form.QuestionForm;
import com.mysite.shoppingMall.Repository.QuestionRepository;
import com.mysite.shoppingMall.Repository.UserRepository;
import com.mysite.shoppingMall.Service.QuestionService;
import com.mysite.shoppingMall.Ut.Ut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
@Controller
@RequestMapping("/question")
public class QuestionController {
@Autowired
private QuestionService questionService;
//C qna 게시글 생성 ==============================================
@GetMapping("/doWrite")
public String doWrite(QuestionForm questionForm){
return "QnA/write.html";
}
@PostMapping("/doWrite")
public String doWrite(@Valid QuestionForm questionForm, BindingResult bindingResult, HttpSession session, Model model){
if(bindingResult.hasErrors()){
return "QnA/write.html";
}
this.questionService.doWrite(questionForm.getSubject(), questionForm.getContent(), session); // 글 작성
return "QnA/list.html";
}
}
코드가 길지만 궁극적으로는 PostMapping만 보면 된다.
@Valid를 통해 유효성 검사를 진행한다.
위에서 Form에서 제한사항을 어기면 message를 담고 bingingResult에 에러를 담는다.
HTML
<form th:action="@{/question/doWrite}" th:object="${questionForm}" method="post">
<!-- userId input -->
<div>제목</div>
<p th:if="${#fields.hasErrors('subject')}" th:errors="*{subject}" class="text-base text-red-500">제목은 필수항목 입니다.</p>
<input type="text" name="subject" placeholder="제목을 입력해주세요." />
<!-- Password input -->
<div>내용</div>
<p th:if="${#fields.hasErrors('content')}" th:errors="*{content}" class="text-base text-red-500">내용은 필수항목 입니다.</p>
<textarea name="content" id="content" cols="30" rows="15" th:value="${questionForm.getContent()}" placeholder="내용을 입력해주세요."></textarea>
</form>
th:errors="*{content}" 를 통해 에러를 가져오고
th:if="${#fields.hasErrors('content')}" 를 통해 에러가 있는지 없는지에 따라 태그를 표시하거나 표시하지 않는다.
'스프링부트' 카테고리의 다른 글
[스프링부트] WebSocket와 stomp (0) | 2022.09.13 |
---|---|
[스프링부트] 파일 이름 변경 (0) | 2022.09.11 |
[스프링부트] JWT(Json Web Token) - 코드 (0) | 2022.09.06 |
[스프링 부트] JWT(Json Web Token)란? (0) | 2022.09.05 |
[스프링 부트] 리액트와 스프링부트 연결 (0) | 2022.08.29 |
Comments