bleepcoder[Springfox: @ApiResponse response parameter not used in 3.0.0]
Swagger
를 사용해서 API 문서 생성 중,
@ApiResponse
Annotation으로 응답 Code 별 Response를 따로 DTO Class로 관리하고 싶던 와중,
아래와 같이 작성해도 응답 결과가 빈값으로 출력되고 있었다.
@PostMapping("")
@ApiOperation(
value = "신규 자격증 생성"
, notes = "신규 자격증을 생성한다."
, produces = "application/json"
, response = ResponseDTO.class
)
@ApiImplicitParams({
@ApiImplicitParam(
name = "requestDTO"
, value = "생성을 위해 필요한 Requeest Body"
)
})
@ApiResponses({
@ApiResponse(
code = 200
, message = "생성 성공"
)
, @ApiResponse(
code = 201
, message = "생성된 자원 정보"
, response = ResponseDTO.class
, responseContainer = "List"
)
, @ApiResponse(
code = 409
, message = "로직 수행 불가 모순 발생"
, response = ErrorDTO.class
, responseContainer = "List"
)
})
@ResponseBody
public ResponseDTO postLicenses(@RequestBody RequestDTO requestDTO) {
return new ResponseDTO();
}
@Getter
@Setter
@ToString
@NoArgsConstructor
@ApiModel(description = "에러 상태")
public class ErrorDTO {
@ApiModelProperty(example = "1")
private String code;
@ApiModelProperty(example = "올바르지 않은 회원 ID")
private String message;
}
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class ResponseDTO {
@ApiModelProperty(example = "111")
private long seq;
@ApiModelProperty(example = "길로그")
private String name;
@ApiModelProperty(example = "gillog")
private String id;
@ApiModelProperty(example = "2021-07-02")
private Date created;
@ApiModelProperty(example = "[{'rel' : 'self', 'href' : 'https://api.ddaja.com/licenses/111', 'method' : 'GET'}]")
private List<String> links;
}
나는 Swagger
, @ApiResponse
, NotWorking
등으로 Google 신의 도움을 구했고,
해당 이슈가 Swagger 3.0.0대 Model과 관련있다는 걸 발견했다.
Spring fox 3.0은 v3 Model을 사용하는데,
source.getResponses() 함수의 Type MissMatch
관련 이슈 였다.
해결 방법으로는 크게 두 가지가 있는데,
Swagger v3 model 설정을 끄는 방법과,
Docket
객체의 DocumentationType을 2버전 대로 내리는 방법이 있다.
use-model-v3
를 false
로 지정첫 번째 방법은 spring boot 설정(application.properties)에서 swagger의 use-model-v3
를 false
로 지정하는 방법이다.
springfox.documentation.swagger.use-model-v3=false
하지만 나는 위 방법으로 해결하지 못했다.
두 번째 방법은 SwaggerConfig
에서 Docket
객체 생성 Prameter의 DocumentationType
을 SWAGGER_2
로 지정하는 방법이다.
new Docket(DocumentationType.SWAGGER_2)
위와 같이 변경하여 결국 해결할 수 있었다.
오늘도 해결 완료 🙆🏻♂️