Controller 에서 요청 객체 변수 유효성 검사하기
validation 라이브러리 추가
implementation 'org.springframework.boot:spring-boot-starter-validation'
Request 객체 생성
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Positive;
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class UserRequest {
@NotEmpty(message = "빈 문자열이나 null 은 허용되지 않습니다.")
private String name;
@NotBlank(message = "빈 문자열이나 null, 공백으로만 이루어진 것은 허용되지 않습니다.")
private String password;
@Positive(message = "양수만 허용됩니다.")
private Long age;
@NotNull(message = "null은 허용되지 않습니다.")
private Long id;
}
위와 같이 @NotBlank
, @Positive
등 적절한 에너테이션으로 유효성 조건을 추가할 수 있고, 원하는 default message도 추가해서 입력할 수 있다.
Controller 설정
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class testController {
@PostMapping
public ResponseEntity newUser(@Validated @RequestBody UserRequest userRequest, BindingResult br) {
if (br.hasErrors()) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(br.getFieldError().getDefaultMessage());
}
return ResponseEntity.ok(userRequest);
}
}
유효성 체크를 할 객체 앞에 @Validated
를 붙여주고, 파라미터로 BindingResult
를 추가하면, 에러 발생 시 핸들링도 할 수 있다.
테스트 해보기
name 이 빈 문자열일 경우 에러 발생
password의 경우는
@NotBlank
조건에 의해서 공백만 입력되어도 에러 발생
Long 타입의 id 가 null 로 입력되어 에러 발생
age 값을
@Positive
조건을 걸어서, 음수 입력 시 에러 발생