2013-06-11 3 views
5

나는 Spring MVC를 사용하여 다양한 REST 서비스를 구현하고있다. 설명서를 보려면 Swagger를 사용하고 있습니다.복수의 주석을 하나로 묶어 반복하지 않기.

이 기능은 훌륭하게 작동하며 문서는보기에 좋으며 실제로 기능적입니다. 내가 가지고있는 유일한 문제는 문서에 대한 주석이 컨트롤러 클래스, 특히 오류 코드 주석을 많이 포함한다는 것입니다.

예 : 많은 경우에

@ApiErrors(value = { 
    @ApiError(code = 123, reason = "Reason123"), 
    @ApiError(code = 124, reason = "Reason124"), 
    @ApiError(code = 125, reason = "Reason125"), 
    @ApiError(code = 126, reason = "Reason126"), 
    @ApiError(code = 127, reason = "Reason127") }) 
public void exampleFunctionImplementation() { 
} 

, 이것은 실제 애플리케이션 코드 사이의 어딘가에 숨겨져 주석의 큰 블록에 연결됩니다. 또한 많은 주석이 동일한 오류 코드 세트를 반환 할 수 있으므로이 주석 세트는 종종 반복됩니다.

어노테이션 목록을 다른 클래스 파일의 상수로 정의함으로써이 부분을 줄이는 옵션이 있습니까? 아니면 내가 간과 한 것보다 더 간단한 무엇인가?

는 어디 선가 @ApiError 항목의 배열을 정의하는 시도, 그러나 이것은 컴파일되지 않습니다 :

ApiError[] array = {ApiError(code = 123, reason = "Reason123")}; 

사람이 해결하는 방법의 힌트 나에게이 문제를 줄 수 있다면 나는 기꺼이 것입니다, 감사합니다 사전에!

+0

두 사람 모두 같은 문제가 있습니다. http://stackoverflow.com/questions/14195155/ibatis-create-an-array-of-multiple-annotations-annotation-reuse – Anderson

답변

1

주석 회원은 제한된 유형 (JLS 9.6) 만 있습니다. 주석 형에 선언 된 메서드의 반환 형식이없는 경우 다음 중 하나를

그것은 컴파일 타임 오류가 발생 : 원시 형, 문자열, 클래스, 클래스의 매개 변수 호출, 열거 형 (§8.9), 주석 유형 또는 요소 유형이 앞의 유형 중 하나 인 배열 유형 (§10).

값은 상수 표현식이어야합니다 (JLS 9.7). 이 표준에서는 이라는 말을 사용하여에 해당합니다.

T 배열 타입 E [] 및 다음 중 하나

V는 V에서 (배열 초기화에 VariableInitializer 유사)을 각 ElementValueArrayInitializer ElementValue 인 E에 상응이고; 또는

V는 V의 유형이 E.

에 상응 인 ElementValue입니다 할당 호환 (§5.2) 또한 T, 및과 :

T가 원시적 형 또는 문자열 인 경우, 그리고 V는 상수 표현이다 (§15.28).

V가 null이 아닙니다.

T가 Class 또는 Class의 호출이고 V가 클래스 리터럴 (§15.8.2) 인 경우.

T가 열거 형이고 V가 열거 형 상수 인 경우

배열이 상수 표현이 아니므로 코드가 컴파일되지 않습니다. 큰 주석 목록을 예상 할 경우 아마도이 작업을 수행 할 수있는 또 다른 방법이있을 것입니다.나는 Swagger를 모른다. 그러나 당신은 이것을 피할 수 없을지도 모른다.

+1

불쌍한 점 - 어떻게 든, 나는 거기에서 희망을 품었습니다. 어떻게 든 특수 문자 집합을 재사용 할 수있는 영리한 방법이 될 것입니다 .-( – Volker

+0

Java 8이 도움이 될 것입니다. http://docs.oracle.com/javase/tutorial/java/annotations/repeating.html을 참조하십시오. –

+1

@EricJablow, this 새로운 기능은 좋지만 도움이되지는 않습니다. 주제 시동기는 메소드 간의 주석을 복제하고 싶지 않기 때문에 성가신 주석을 한 번 정의하고 다른 메소드에 적용하기를 원합니다. – walv

관련 문제