스프링 입문
[스프링 입문] 6.1 Spring Boot Validation
코딩펭귄
2024. 1. 8. 19:23
Validation
- 자바에서 null값에 대해 접근하려고 할 때 null pointer exception 발생 -> 이러한 부분 방지 위해 미리 검증을 하는 과정을 validation 이라고 함
[ validation이 필요한 이유 ]
1) 검증해야할 값이 많은 경우 코드의 길이가 길어짐
2) 구현에 따라 Service Logic과의 분리가 필요함
3) 흩어져 있는 경우 어디에서 검증하는지 알기 어렵고, 재사용의 한계가 있음
4) 구현에따라 달라질 수 있지만, 검증 로직이 변경되는 경우 테스트코드등 참조하는 클래스에서 로직이 변경되어야하는 부분이 발생할수 있음
자주 사용하는 annotation
@size | 문자길이 측정 (Int Type 불가) |
@NotNull | null 불가 |
@NotEmpty | null, "" 불가 |
@NotBlank | null, "", " " 불가 |
@Past | 과거날짜 |
@PastOrPresent | 오늘이거나 과거날짜 |
@Future | 미래날짜 |
@FutureOrPresent | 오늘이거나 미래날짜 |
@Pattern | 정규식 적용 |
@Max | 최대값 |
@Min | 최소값 |
@AssertTrue/False | 별도 로직 적용 |
@ Valid | 해당 object validation 실행 |
예제
controller : 요청에 대한 것들 정리
binding result 객체를 통해 새로운 변환값을 받을 수 있고, 만약 이게 없으면 예외처리 하면 됨
스프링부트 validation 사용방법 : annotation 붙여주면 됨
객체를 검사하고 싶은곳에다가는 valid annotaion 붙여주면됨
@RestController
@RequestMapping("/api")
public class ApiController {
@PostMapping("/user")
public ResponseEntity user(@Valid @RequestBody User user, BindingResult bindingResult){
if(bindingResult.hasErrors()){
StringBuilder sb = new StringBuilder();
bindingResult.getAllErrors().forEach(objectError -> {
FieldError field = (FieldError) objectError;
String message = objectError.getDefaultMessage();
System.out.println("field : "+field.getField());
System.out.println(message);
sb.append("field : "+field.getField());
sb.append("message : "+message);
});
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(sb.toString());
}
return ResponseEntity.ok(user);
}
}
public class User {
@NotBlank
private String name;
@Max(value = 90)
private int age;
@Email
private String email;
@Pattern(regexp = "\\d{2,3}-\\d{3,4}-\\d{4}$", message = "핸드폰 번호의 양식과 맞지 않습니다. xxx-xxxx-xxxx")
private String phoneNumber;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
", phoneNumber='" + phoneNumber + '\'' +
'}';
}
}