본문 바로가기

백엔드

[Spring Boot] @Validation 유효성

728x90

 

/* Validation */

implementation 'org.springframework.boot:spring-boot-starter-validation'

 

위는 gradle 용 dependency로 validation dependency를  이용할 수 있다. 

 

/* 객체 설정*/

@Getter
@Setter
@Entity
public class Todo {

    @NotNull
    private int id;
    
    @NotBlank(message = "유저명은 필수 입력 값입니다")
    private String userName;
    
    @Size(min = 10, message = "열글자 이상 입력하세요")
    private String description;
    
    private LocalDate localDate;
    
    private boolean done;
}

 

위와 같은 객체를 생성 해보았다.

 

/* 컨트롤러 설정*/

@Controller
public class TodoController{
    @GetMapping("/add-todo")
    public String showNewTodo(ModelMap modelMap){
        modelMap.addAttribute("todo",new Todo());
        return "addTodo";
    }
    
    @PostMapping("/add-todo")
    public String addNewTodo(@Valid @ModelAttribute("todo")Todo todo, BindingResult result){
        if(result.hasErrors()){
            return "addTodo";
        }
        todoService.addTodo("user",todo.getDescription(), LocalDate.now(), false);
        return "redirect:/list-todos";
    }
}

 

컨트롤러에서 객체 앞에 @Valid를 사용할 수 있다. 나는 BindingResult라는 객체를 패러미터로 넣고 result.hasErrors()를 통해 validation 검사를 한다.

 

/* Thymeleaf 설정 에러 표시*/

<form th:object="${todo}" method="post">
	<p th:if="${#fileds.hasErrors('description')}" th:errors="*{description}"></p>
</form?

 

위 부분은 Todo 객체의 description의 validation에 이상이 있을시 message에 써뒀던 내용으로 에러 표시를 한다.

 

/* Validation 종류*/

@Null null만 허용
@NotNull "", " "는 허용하되, Null은 허용 안함
@NotEmtpy " "는 허용하되, Null과 ""는 허용 안함
@NotBlank null, "", " " 모두 허용하지 않는다
@Pattern(regexp = ) 정규식 검사
@Size(min=, max=) 길이를 제한
@Max(value = ) value 이하의 값만 허용
@Min(value = ) value 이상의 값만 허용
@Positive 값을 양수로 제한
@PositiveOrZero 값을 양수와 0으로 제한
@Negative 값을 음수로 제한
@NegativeOrZero 값을 음수와 0으로 제한
@Future Now 보다 미래의 날짜, 시간
@FutureOrPresent Now 혹은 미래의 날짜, 시간
@Past Now 보다 과거의 날짜, 시간
@PastFutureOrPresent Now 혹은 과거의 날짜 시간
728x90