아카이브

[스프링 기반 REST API 개발] 입력 받을 수 없는 값의 경우 Bad Request 본문

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())

        ;
    }