Validation 이란 프로그래밍에 있어 가장 필요한 부분입니다. 특히 자바에서는 null 값에 대해서 접근하려 할 때 null pointer exception이 발생함으로, 이러한 부분을 방지하기 위해 미리 검증하는 과정을 validation 이라 합니다.
예시)
public void ex(String account, String pw, int age) {
if (account == null || pw == null){
return "";
}
if (age == 0){
return "";
}
// ~ 이후 정상 logic code
}
잘못된 input parameter 때문에 전체적인 서비스에 영향을 줄 수도 있다. 하지만 불필요한 반복적인 코드를 사용하는 것은 유지보수를 힘들게 합니다.
대표적인 validation annotation
@Size, @NotNull, @NotEmpty, @NotBlank, @Pattern, @Max, @Min 등등
@RestController
@RequestMapping("/api")
public class ApiController {
@PostMapping("/post")
public ResponseEntity post(@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);
});
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(sb.toString());
}
// logic 실행
System.out.println(user.toString());
return ResponseEntity.ok(user);
}
}
public class User {
private String name;
@Max(value = 90)
private int age;
@Email
private String email;
@JsonProperty("phone_number")
@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 + '\'' +
'}';
}
}