복붙노트

[SPRING] Swagger UI와 ApiResponses 주석을 Java Spring 엔드 포인트와 함께 사용할 때 DRY하는 방법은 무엇입니까?

SPRING

Swagger UI와 ApiResponses 주석을 Java Spring 엔드 포인트와 함께 사용할 때 DRY하는 방법은 무엇입니까?

나는 당신의 apis가 아주 사용하기 쉽게하기 때문에 Swagger를 좋아한다. 다음과 같은 Swagger 주석을 사용합니다.

끝점에서 쿼리 매개 변수, 요청 매개 변수, 본문 요청 등.

나는 POJO 수업을 깨끗하게 유지하는 것을 좋아하지만, 일반적으로 나는 DRY 규칙을 따르기 위해 최선을 다합니다. 그러나 비틀 거림에 관해서는 아래에 나와있는 것처럼 계속 반복해서 반복한다는 것을 알았습니다.

@ApiOperation(value = "Retrieve object by id")
@ApiResponses(value = {
    @ApiResponse(code = 200, message = "OK"),
    @ApiResponse(code = 404, message = "Not Found"),
    @ApiResponse(code = 400, message = "Bad Request"),
    @ApiResponse(code = 500, message = "ISE")
})
public Response retrieveById(@ApiParam(value = "Some id") @PathParam("sid") int id) {       
}

@ApiOperation(value = "Create object")
@ApiResponses(value = {
    @ApiResponse(code = 201, message = "Created"),
    @ApiResponse(code = 404, message = "Not Found"),
    @ApiResponse(code = 400, message = "Bad Request"),
    @ApiResponse(code = 500, message = "ISE")
})
public Response create(@ApiParam(value = "Request body") RequestBody body) {
}

Swagger 주석으로 반복되는 것을 피하는 방법은 무엇입니까?

해결법

  1. ==============================

    1.인터넷 검색을 한 적이 있는데이 github 문제와 ApiResponses 주석과 직접 관련이없는 몇 가지 다른 질문이 있는데 그 중 아무 것도 작동하는 솔루션을 제시하는 것 같지 않습니다.

    인터넷 검색을 한 적이 있는데이 github 문제와 ApiResponses 주석과 직접 관련이없는 몇 가지 다른 질문이 있는데 그 중 아무 것도 작동하는 솔루션을 제시하는 것 같지 않습니다.

    Swagger UI 2.0 사용하기 나는 한 번 시도해 보려고 생각 했으므로 다음을 수행했다.

    아래 참조

    package com.raf.annotation;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    import io.swagger.annotations.ApiResponse;
    import io.swagger.annotations.ApiResponses;
    
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    @ApiResponses(value = {
            @ApiResponse(code = 200, message = "Ok"),
            @ApiResponse(code = 404, message = "Not Found"),
            @ApiResponse(code = 400, message = "Bad Request"),
            @ApiResponse(code = 500, message = "ISE") 
    })
    public @interface GroupedApiResponsesAvecOk {
    }
    

    마찬가지로 (엔드 포인트 구조와 리턴되는 응답 메시지에 따라 하나 이상의 사용자 정의 주석에서 원하는대로 주석을 그룹화 할 수 있습니다)

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    @ApiResponses(value = {
            @ApiResponse(code = 201, message = "Created"),
            @ApiResponse(code = 404, message = "Not Found"),
            @ApiResponse(code = 400, message = "Bad Request"),
            @ApiResponse(code = 500, message = "ISE") 
    })
    public @interface GroupedApiResponsesAvecCreated {
    }
    

    그리고 나서 @ApiResponses 대신 endpoint를 생성 할 때 retrieveById와 @GroupedApiResponsesAvecCreated에 위의 @GroupedApiResponsesAvecOk를 사용하고 이전과 같이 작업했습니다.

    위에 표시된 것처럼 400, 404, 500과 관련된 ApiResponse 주석은 이제 다른 끝점에서 다시 사용할 수 있습니다.

  2. from https://stackoverflow.com/questions/48634417/how-to-dry-when-using-swagger-ui-and-the-apiresponses-annotations-with-java-spri by cc-by-sa and MIT license