@NotBlank, @NotEmpty, @NotNull의 동작 차이를 Spring Boot + Thymeleaf로 구성
하고 싶은 일
JSR-303 Bean Validation의 거동을 잘 모르고, 현장에서 혼란을 초래했기 때문에 정리해 보겠습니다. 구체적으로는 다음 주석입니다.
· javax.validation.constraints.NotBlank (@NotBlank)
· javax.validation.constraints.NotEmpty (@NotEmpty)
· javax.validation.constraints.NotNull (@NotNull)
결론
※탭 이외의 이스케이프 순서는 검증하고 있지 않습니다만 아마 탭과 같은 거동이 된다고 생각합니다(아마)
모두 전각 스페이스의 경우는 체크에 걸리지 않으므로 주의가 필요합니다.
검증
다음과 같은 간단한 화면에서 검증해 보았습니다.
HelloController.java
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.demo.form.HelloForm;
@Controller
@RequestMapping(value = "/")
public class HelloController {
private static final String SAMPLE_URL = "sample/Hello";
@GetMapping
public String index(@ModelAttribute HelloForm helloForm) {
return SAMPLE_URL;
}
@PostMapping
public String register(@Validated HelloForm helloForm, BindingResult result) {
return SAMPLE_URL;
}
}
HelloForm.java
package com.example.demo.form;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
public class HelloForm {
@NotBlank
String notBlankField;
@NotEmpty
String notEmptyField;
@NotNull
String notNullField;
public String getNotBlankField() {
return notBlankField;
}
public void setNotBlankField(String notBlankField) {
this.notBlankField = notBlankField;
}
public String getNotEmptyField() {
return notEmptyField;
}
public void setNotEmptyField(String notEmptyField) {
this.notEmptyField = notEmptyField;
}
public String getNotNullField() {
return notNullField;
}
public void setNotNullField(String notNullField) {
this.notNullField = notNullField;
}
}
Hello.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form method="post" action="/" th:object="${helloForm}">
<span th:if="${#fields.hasErrors('notBlankField')}" th:errors="*{notBlankField}" style="color: red"></span><br />
NotBlankField:<input type="text" name="notBlankField" th:field="*{notBlankField}" /><br />
<span th:if="${#fields.hasErrors('notEmptyField')}" th:errors="*{notEmptyField}" style="color: red"></span><br />
NotEmptyField:<input type="text" name="notEmptyField" th:field="*{notEmptyField}" /><br />
<span th:if="${#fields.hasErrors('notNullField')}" th:errors="*{notNullField}" style="color: red"></span><br />
NotNullField:<input type="text" name="notNullField" th:field="*{notNullField}" /><br /><br />
<input type="submit" value="Submit" />
</form>
</body>
</html>
빈 문자
NotBlank, NotEmpty만 체크에 걸린다
모두 반각 공간
※NotBlank만 체크에 걸린다
모두 전각 공간
※NotBlank, NotEmpty, NotNull 모두 체크에 걸리지 않는다
소스는 다음과 같습니다.
htps : // 기주 b. 코 m / 케 니치 나가 오카 / sp 린 g - 보오 t fu rm - ゔ ぃ
이상입니다.
Reference
이 문제에 관하여(@NotBlank, @NotEmpty, @NotNull의 동작 차이를 Spring Boot + Thymeleaf로 구성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/NagaokaKenichi/items/67a63c91a7db8717fc7d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)