728x90
스프링 기반 REST API 개발
2. 이벤트 생성 API 개발
포스팅 참조 정보
GitHub
공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다
해당 포스팅에 대한 내용의 GitHub 주소
실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다
https://github.com/freespringlecture/spring-rest-api-study/tree/chap02-05_input_fail_bad_request
해당 포스팅 참고 인프런 강의
https://www.inflearn.com/course/spring_rest-api/dashboard
실습 환경
- Java Version: Java 11
- SpringBoot Version: 2.1.2.RELEASE
5. Event 생성 API 구현: 입력값 이외에 에러 발생
Event를 사용해서 이상한 값들을 넣어주면 응답이 400(Bad Request)로 나오길 바람
ObjectMapper 커스터마이징
스프링 부트가 제공한 properties를 사용한 ObjectMapper 확장기능을 사용
- deserialization: JSON 문자열을 Object로 변환하는 과정
- serialization: Object를 JSON으로 변환하는 과정
deserialization 할때 unKnown properties가 있으면 실패하라는 옵션
spring.jackson.deserialization.fail-on-unknown-properties=true
동작 원리
- id, free, offline, eventStatus와 같이 unKnown properties를 넘기면 에러가 발생함
- 에러가 발생하면 스프링 MVC는 기본적으로 400(Bad Request)로 처리함
테스트 할 것
- 입력값으로 누가 id나 eventStatus, offline, free 이런 데이터까지 같이 주면?
- Bad_Request로 응답 vs 받기로 한 값 이외는 무시
입력값 이외에 에러 발생 테스트 코드 작성
Event 생성 API Bad Request 테스트 코드 추가
- id, free, offLine, eventStatus 테스트 데이터 제거
...
public class EventControllerTests {
...
@Test //EventDto를 사용하여 값을 만든경우 잘동작함
public void createEvent() throws Exception {
EventDto event = EventDto.builder()
.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 스타텁 팩토리")
.build();
...
}
@Test // Event를 사용해서 이상한 값들을 넣어주면 응답이 isBadRequest로 나오길 바람
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_UTF8) //요청타입
.accept(MediaTypes.HAL_JSON) //받고싶은 타입
.content(objectMapper.writeValueAsString(event))) //event를 json을 String으로 맵핑
.andDo(print())
.andExpect(status().isBadRequest()) // 400 Bad Request
;
}
}
```
728x90
'개발강의정리 > Spring' 카테고리의 다른 글
[스프링 기반 REST API 개발] 2-7. Event 생성 API 구현: Bad Request 응답 본문 만들기 (0) | 2019.12.28 |
---|---|
[스프링 기반 REST API 개발] 2-6. Event 생성 API 구현: Bad Request 처리하기 (0) | 2019.12.28 |
[스프링 기반 REST API 개발] 2-4. Event 생성 API 구현: 입력값 제한하기 (0) | 2019.12.28 |
[스프링 기반 REST API 개발] 2-3. Event 생성 API 구현: EventRepository 구현 (0) | 2019.12.28 |
[스프링 기반 REST API 개발] 2-2. Event 생성 API 구현: 201 응답 받기 (0) | 2019.12.28 |
댓글