REST API (4) Event 생성 API - Bad Request 처리하기

LEE ·2024년 3월 30일

REST API

목록 보기
4/15

오늘의 목표 : 입력값이 이상한 경우 Bad Request 보내는 방법

입력값이 이상한 경우란 : 유효성 검사(Java Bean Validation) 를 실패하거나, DTO에 정의된 값 이외의 것을 보내는 것 이라고 정의 하겠다.

오늘의 목차 :

1. DTO에 정의된 값 이외의 것을 보내는 것 에 대한 Bad Request 처리

2. 유효성 검사(Java Bean Validation) 를 통한 Bad Request 처리

1. DTO에 정의된 값 이외의 것을 보내는 것 에 대한 Bad Request 처리

createEvent 수정

EventDto로 변경하면서 id, free, offline, eventStatus와 같은 불필요한 데이터는 더 이상 요청에 포함될 필요가 없어져 제거


createEvent_BadRequest 테스트 작성

createEvent_BadRequest 테스트는 우리가 설정을 추가하지 않았기 때문에 실패한다.

우리는 400 을 원했지만, 201 status 가 반환

application.properties 에 추가

spring.jackson.deserialization.fail-on-unknown-properties=true 설정은 Spring Boot 애플리케이션에서 Jackson JSON 라이브러리의 기본 동작을 제어하는 데 사용된다. 이 설정은 Jackson이 JSON 데이터를 역직렬화할 때 알려지지 않은 속성(unknown properties)이 포함되어 있으면 실패하도록 설정한다.


테스트가 다음과 같이 status 400 으로 성공 하는 것을 볼 수 있다.


2. 유효성 검사(Java Bean Validation) 를 통한 Bad Request 처리

2-1. 입력값이 없을 때 Bad Request 처리

createEvent_BadRequest_Empty_Input 작성

createEvent_BadRequest_Empty_Input 테스트 실패

입력값이 완전 없는 값을 전달했지만 Bad Request 가 아닌 create 코드가 나오는 것을 볼 수 있다.


유효성 검사(Java Bean Validation) 를 통해 해결하자.

EventDto에 검증 어노테이션 추가

유효성 검사 (@Valid와 BindingResult 또는 Errors)

@Valid 사용 시 EventDto 바인딩 할 때 EventDto에 설정되어 있는 어노테이션 정보를 참고하여검증을 수행한다. 만약 검증에 실패하면 Errors 에 에러 정보를 담게된다.

Errors 에러가 있다면 BadRequest 반환


createEvent_BadRequest_Empty_Input 테스트 성공한 것을 볼 수있다.


2-2. 비즈니스 로직으로 Bad Request 처리

createEvent_Bad_Request_Wrong_Input 테스트 작성

endEventDateTime 가 beginEventDateTime 보다 작고, maxPrice 가 0보다 크면 서 basePrice 가 maxPrice 보다 크게 된다면 입력값이 잘못된 것이다.

다음 테스트를 돌렸을 때 우리는 BadRequest 면 좋겠지만 다음 테스트는 실패할 것이다.


EventValidator 작성( 비즈니스 로직 유효성 처리)

EventController 수정

@InitBinder 어노테이션 사용하여 "eventDto" 가 모든 메서드에서 바인딩 될 때 유효성 검사를 진행한다. 만약 유효성 검사에 실패한다면 Errors 에 에러가 담기게 된다.

에러가 있을경우 badRequest 반환한다.

createEvent_Bad_Request_Wrong_Input 테스트 성공


0개의 댓글