[이벤트 생성 API 개발]_05_입력값 이외에 에러 발생

1 minute read

Event 생성 API 구현: 입력값 이외에 에러 발생

ObjectMapper 커스터마이징

  • spring.jackson.deserialization.fail-on-unknown-properties=true

테스트 할 것

  • 입력값으로 누가 id나 eventStatus, offline, free 이런 데이터까지 같이 주면?
    • Bad_Request로 응답 vs 받기로 한 값 이외는 무시

입력값 이외에 에러 발생 테스트

  • id 또는 입력 받은 데이터로 계산해야 하는 값들은 입력을 받지 않아야 한다.
  • 입력값으로 누가 id나 eventStatus, offline, free 이런 데이터까지 같이 주면?
    • Bad_Request로 응답 vs 받기로 한 값 이외는 무시
@Test
@DisplayName("입력값 이외에 에러 발생")
public void createEvent_Bad_Request() throws Exception {
    Event event = Event.builder()
            .id(100)
            .name("Spring")
            .description("REST API Development with Spring")
            .beginEnrollmentDateTime(LocalDateTime.of(2018, 11, 23, 14, 21))
            .closeEnrollmentDateTime(LocalDateTime.of(2018, 11, 24, 14, 21))
            .beginEventDateTime(LocalDateTime.of(2018, 11, 25, 14, 21))
            .endEventDateTime(LocalDateTime.of(2018, 11, 26, 14, 21))
            .basePrice(100)
            .maxPrice(200)
            .limitOfEnrollment(100)
            .location("강남역 D2 스타텁 팩토리")
            .free(true)
            .offline(false)
            .eventStatus(EventStatus.PUBLISHED)
            .build();

    mockMvc.perform(post("/api/events/")
            .contentType(MediaType.APPLICATION_JSON)
            .accept(MediaTypes.HAL_JSON)
            .content(objectMapper.writeValueAsString(event)))
            .andDo(print())
            .andExpect(status().isBadRequest())
    ;
}

입력값 이외에 에러 발생 처리

스프링부트가 제공하는 properties를 사용한 ObjectMapper 확장 기능을 사용하면 된다.

Serialization : Object → JSON

Deserialization : JSON → Object

  • 옵션 설정

    • JSON 입력값을 Object EventDto로 Deserializie할 때, 알지못하는 값이 있다면 에러발생

      알지못하는 값 == Dto에서 받을 수 없는 속성

      spring.jackson.deserialization.fail-on-unknown-properties=true
      

에러가 발생하면 스프링MVC는 기본적으로 Bad Request로 처리한다.

⇒ 어떻게 처리할지는 선택의 문제

입력값으로 누가 id나 eventStatus, offline, free 이런 데이터까지 같이 주면?

  • Bad_Request로 응답 : 좀 더 견고한 처리
  • 받기로 한 값 이외는 무시 : 좀 더 유연한 처리