@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 - ゔ ぃ

이상입니다.

좋은 웹페이지 즐겨찾기