Backend/Spring

[Spring] springdoc swagger에서 LocalTime 변수를 string으로 받기 (feat. @Schema)

mirae.kwak 2023. 5. 29. 21:56
728x90

LocalTime 변수를 swagger에서는 어떻게 받을까?

시간:분 형식의 데이터를 받기위해 LocalTime을 사용했다. 이때 JsonFormat을 사용해 pattern을 내가 원하는 형식으로 지정해준 상태였다.

이때 swagger에서 확인해본 형식은 다음처럼 시간, 분, 초를 따로 받고 있었다. 여기서 string형으로 패턴을 지켜 요청하면 정상적으로 잘 동작했다. 따라서 이를 string으로 받겠다는 정의가 필요했다.

 

LocalTime 변수를 String으로 받기

검새해보았을 때 springfox 관련 설정이 많이 보였다. springfox의 경우 swagger config 시에 directModelSubstitude 메소드를 사용해서 설정해줄 수 있다고 한다.

   	@Bean
   	public Docket postsApi() {
      	return new Docket(DocumentationType.SWAGGER_2)//.groupName("public-api")	
       			.directModelSubstitute(LocalDateTime.class, String.class)
               	.directModelSubstitute(LocalDate.class, String.class)
               	.directModelSubstitute(LocalTime.class, String.class)
               	.directModelSubstitute(ZonedDateTime.class, String.class)
            	.apiInfo(apiInfo())
        		...
   }

 

그럼 springdoc에서는 어떻게 할 수 있을까?

@Schema 애노테이션을 사용하여 가능하다. request body나 response body에 설명을 해주는 애노테이션인데, 번거로워서 따로 작성하지 않았는데 깜빡 있고있었다.

 

@Schema

request body나 response body에 설명을 해주는 애노테이션

  • 파라미터
    • description : 변수 설명
    • example : 예시 ex) example = "10:00"
    • hidden : swagger 숨김
    • type : 변수 타입 설정 !! 

@Schema의 type을 string으로 설정해주어 LocalTime을 시, 분, 초 각각 받는 것이 아닌 string으로 받을 수 있었다. 

 

728x90