[portfolio] @RequestBody 객체 검증하기(@Valid)

박이레·2023년 10월 25일
0

portfolio

목록 보기
15/20

 그


의존성 추가

/* Validation */
implementation 'org.springframework.boot:spring-boot-starter-validation'

@Valid, BindingResult 추가

검증하고자 하는 @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;

ControllerAdvice 추가

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);
    }
profile
혜화동 사는 Architect

0개의 댓글