[Spring Boot] Validation

이도훈·2021년 9월 19일
0

Spring

목록 보기
4/6

1. Validation

  • 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 등등
  • validation 실습
    1) controller
@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);
    }
}
  1. DTO
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 + '\'' +
                '}';
    }
}
profile
back-end developer

0개의 댓글