Spring/스프링 기반 REST API 개발
[스프링 기반 REST API 개발] 입력 받을 수 없는 값의 경우 Bad Request
주멘이
2021. 1. 5. 23:50
입력받을 수 없는 값들이 넘어왔을 경우 Bad Request를 응답한다.
ObjectMapper 설정하기
- serialize : Object -> JSON
-deSerialize : JSON -> Object
JSON -> Object 변환 시 unknown properties(입력받을 수 없는 값) 일 경우 오류가 발생하는데, 이를 무시하기 위해
application-properties에 spring.jackson.deserialization.fail-on-unknown-properties=true를= 통해 무시한다.
name, number를 받을 수 있는 경우에 size(unknown)을 넘길 경우, 이를 무시하고 deserialize를 진행한다.
@DisplayName("입력받을 수 없는 값을 사용한 경우에 에러가 발생하는 테스트")
@Test
@DisplayName("입력 받을 수 없는 값을 사용한 경우에 에러가 발생하는 테스트")
void createEvent_Bad_Request() throws Exception {
Event event = Event.builder()
.name("Spring")
.description("REST API dev with Spring")
.beginEnrollmentDateTime(LocalDateTime.of(2020, 12, 25, 12, 12))
.closeEnrollmentDateTime(LocalDateTime.of(2020, 12, 26, 12, 12))
.beginEventDateTime(LocalDateTime.of(2020, 12, 27, 12, 12))
.endEventDateTime(LocalDateTime.of(2020, 12, 28, 12, 12))
.basePrice(100)
.maxPrice(200)
.limitOfEnrollment(1000)
.location("D2 Factory")
/* EventDto에 없는 field를 넘겨줄때 ? 400 bad_request 가 더 엄격한 처리 */
.free(true)
.offline(false)
.eventStatus(EventStatus.PUBLISHED)
.id(100)
.build();
this.mockMvc.perform(post("/api/events/")
.header(HttpHeaders.AUTHORIZATION, getBearerToken(true))
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaTypes.HAL_JSON)
.content(objectMapper.writeValueAsString(event))
)
.andDo(print())
.andExpect(status().isBadRequest())
;
}