그
/* Validation */
implementation 'org.springframework.boot:spring-boot-starter-validation'
검증하고자 하는 @RequestBody 객체에 @Valid를 추가합니다. BindingResult는 만약 @RequestBody로 넘어온 값이 @Valid의 조건에 만족하지 못한 경우, 그 정보를 반환합니다. (bindingResult.hasError())
@PostMapping
public ResponseEntity read(@Valid @RequestBody ReviewEntity entity, BindingResult bindingResult) throws Exception {
if (bindingResult.hasErrors()) throw new BindException(bindingResult);
List<ReviewEntity> list = service.read(entity);
return ResponseEntity.ok(list);
}
public class ReviewEntity extends BaseEntity {
@NotNull(message = "비어 있을 수 없습니다.")
private String WRITER;
AOP로 횡단 관심사를 분리합니다. BindingResult에서 발생한 오류는 @ExceptionHandler가 오류 처리를 진행합니다.
@RestControllerAdvice
public class AdviceController {
@ExceptionHandler(BindException.class)
@ResponseStatus(HttpStatus.EXPECTATION_FAILED)
public ResponseEntity<Map<String, String>> handleBindException(BindException e) {
log.error(e);
Map<String, String> errorMap = new HashMap<>();
if(e.hasErrors()){
BindingResult bindingResult = e.getBindingResult();
bindingResult.getFieldErrors().forEach(fieldError -> {
errorMap.put(fieldError.getField(), fieldError.getCode());
});
}
return ResponseEntity.badRequest().body(errorMap);
}