커스텀 애너테이션을 만들게 된 이유 개발을 하다가 RestController 에서 하나의 메서드에 서로 다른 RequestBody를 받고 싶었다. 상황) 어떠한 서비스에 대한 동작을 제어하는 메서드 였으며, 동작제어 (시작, 종료) 에 따라, RequestBody에 포함하는 속성이 조금 달랐다. 1안) 동작제어 별로 메서드 따로 둠. => 고민을 하긴 했는데, 동일한 대상에 속성 값만 달라지는데, 메서드를 따로 둘만큼 기능 상에 큰 차이가 있다고 생각하지 않았기 때문에 일단 패스하였다. 2안) 메서드 파라미터에 @RequestBody 로 바로 타입 변환하지 않고, HttpRequestServlet을 이용하여, 동작제어에 맞는 타입으로 직접 변환 => 원래 하고자 했던 기능을 구현할 수 있다. 하나의 메서..
나는 Rest API를 Spring Rest Docs을 이용하여, 문서를 생성한다. 그리고 request 및 response 가 보기 쉽게 정렬되서 나오는 prettyPrint를 각 메서드에 적용하여 사용하였다. 그러다 최근에 각 메서드 마다 적용하는 prettyPrint를 setUp에 사용 방법 그대로 적용하였더니, 동작되지 않았고, 디버깅한 결과 mockMvc에 configuration에 적용되지 않음을 알게되었다. 그래서 하는 방식을 정리해 둔다. 동작되는 코드(Test 메서드) 동작 안되는 코드(setUp 메서드) 동작되는 코드(setUp 메서드) withRequestDefaults, withResponsedefaults request preprocessor, response preprocesso..
에러 발생 SpringBoot에서 controller에 대한 테스트를 작성하는 중에, 위와 같은 에러가 발생하였다. 테스트할 값 중에 ZonedDateTime 타입이 있는데, jackson 의 ObjectMapper를 이용하여, Object로 변환할 경우, ZonedDateTime은 자동으로 변환해주지 않는다는 것이다. 해결방법 그리초 찬찬히 살펴보면, 해결법도 알려준다. "com.fasterxml.jackson.datatype:jackson-datatype-jsr310"을 추가하라고 ... Maven Repository 에서 해당 모듈을 추가한다. 이후에 아래와 같이 ObjectMapper에 모듈을 등록하면 된다. 참조 https://stackoverflow.com/questions/66831223/j..
MockMvc 에서 한글 깨짐 현상으로 인해, MockMvcBuilder를 사용하여, MockMvc 객체를 생성했을 때, 아래와 같은 에러가 발생했다면, 에러 REST Docs configuration not found. Did you forget to apply a MockMvcRestDocumentationConfigurer when building the MockMvc instance? 해결방법 기존에 테스트 클래스 상단에 @AutoConfigureRestDocs 으로 자동설정을 했었다면, 해당 자동설정은 삭제하고, 아래 이미지처럼 @ExtendWith(RestDocumentationExtension.class) 설정과 MockMvcBuilders 에서 apply를 이용해 documentationC..
문제 발생 Spring으로 개발하면서 Controller를 테스트하는 중에 아래와 같은 타입 문제가 발생하였다. Controller를 실행해서 얻고자 하는 최종 값의 형태는 Long 타입이었으나, 실제 반환 값은 Integer 타입이었고, 테스트에 실패하였다는 메시지가 출력되었다. 이유 해당 이유는 Jackson 을 이용하여 Deserializer 할 때 발생하는 것으로, 타입이 명확하지 않을 경우, 해당 값에 대한 최적의 타입을 자동으로 할당해준다고 한다. 그렇기 때문에, Long 타입의 1 이었어도, 자동으로 1을 Integer 타입으로 변환하여, 출력하였고, 에러가 발생한 것이다. 자세한 내용은 하단 Reference 를 참고하자. 해결방법 타입을 명확하게 지정하면 된다. 기존 작성 코드는 아래와 ..
본 글은 "Spring in Action : REST 서비스 사용하기" 를 읽고 정리한 글입니다. 스프링 애플리케이션의 REST API 를 사용 방법 - RestTemplate : 스프링 프레임워크에서 제공하는 간단하고 동기화된 REST 클라이언트 - Traverson : 스프링 HATEOAS에서 제공하는 하이퍼링크를 인식하는 동기화 REST 클라이언트 (같은 이름의 자바스크립트 라이브러리로부터 비롯됨, HATEOAS가 적용된 리소스에 대해 링크를 통해 쉽게 접근하기 위해서 만들어진 것) - WebClient : 반응형 비동기 REST 클라이언트 본 글에서는 RestTemplate, Traverson 에 대해 얘기한다. RestTemplate - RestTemplate 은 저수준 HTTP 라이브러리를 이..
Spring in Action 을 읽고, 필요한 부분 정리한 글입니다. HATEOAS : Hypermedia As The Engine Of Application State 클라이언트 요청에 대한 응답으로, 요청한 리소스와 관련된 하이퍼링크를 같이 제공하여, 서버와 클라이언트의 독립성을 높인다. 이뿐만이 아니라, 애플리케이션이 어떻게 동작하는지 사전지식이 없어도, 해당 리소스를 확인하고 링크들을 통해, 접근가능한 동작들을 확인하고 호출할 수 있도록 제공한다. 서버와 클라이언트의 독립성을 어떻게 높이나? 예를들어, 서버에서 제공하는 리소스를 사용하기 위해, 클라이언트 측에서 하드코딩(문자열로 작성한 URL 주소)하여, 리소스 요청 기능을 개발했다. 그런데 서버 측에서 리소스 요청에 대한 경로를 변경했다고 하..