Swagger 경로 지정 및 LocalDateTime Json형식으로 출력되게 만들기

코딩을 합시다·2023년 2월 19일
0

swagger의 build.gradle과 Config 파일이다.

이렇게 하고 http://localhost:8080/swagger-ui.html를 쳐서 들어가면

이런 화면이 뜬다.
버전 문제인가 해서 build.gradle을 바꿔보았고 다시 접속해봤다.

implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'

이번엔 접속은 된다.
근데 뭔가 이상하다 API Info가 적용이 안되었다.
그리고 paths(PathSelectors.ant("/api/**"))로 api가 붙은 url 컨트롤러만 나타낼려고 했는데 api가 안붙은 컨트롤러도 같이 나온다. Docket이 제대로 적용이 안된거 같다.

방법을 찾다가 내가 수동으로 경로를 지정해주는 방법을 알아냈다.

우선 build.gradle을 처음 상태로 돌려준다.

implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0'
implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '3.0.0'

WebMvcConfiguationSupport를 확장시켜주고 addResourceHandlers로 경로를 설정해준다.
addResourceHandlers는 swagger-ui3.0의 jar파일 내부 구조를 보고 설정한 것 이다.

내가 원하는데로 잘 나오는것을 확인 할 수 있었다.

하지만 EnableWebMvc -> DelegatingWebMvcConfiguratiopn -> WebMvcConfigurationSupport 순으로 의존관계가 있기 때문에 LocalDateTime이 array로 변환되어서 나타나는 문제가 있다.

@EnableWebMvc란?

@EnableWebMvc는 Spring MVC의 기본 설정을 커스터마이징하는 기능을 제공합니다. 그러나 이 설정을 사용하면 Jackson 라이브러리에서 LocalDateTime을 기본적으로 배열(Array) 형식으로 변환합니다.
이는 Jackson 라이브러리가 LocalDateTime을 JSON 형식으로 변환할 때, 기본적으로 writeDatesAsTimestamps라는 옵션을 사용하기 때문입니다. 이 옵션은 날짜와 시간을 JSON에서 어떤 형식으로 표현할지를 결정하는데, 기본값으로는 true로 설정되어 있어서, LocalDateTime을 배열(Array) 형식으로 변환합니다.

그래서 마지막으로 SwaggerConfig 클래스 안에 configureMessageConverters 메서드를 오버라이드하는 코드를 작성해주었다.
코드에 대해 설명하자면
configureMessageConverters 메서드를 오버라이드 하여 ObjectMapper를 생성할 때 SerializationFeature.WRITE_DATES_AS_TIMESTAMPS 옵션을 비활성화시켜서 LocalDateTime을 JSON 형식으로 출력할 수 있도록 바꿔주는 방식으로 수정하였다.

날짜가 잘나오는 모습을 볼 수 있다.

0개의 댓글