swagger 설정을 하던 도중 ApiResponse, ApiResponses라는 어노테이션을 사용하게 되었다.
해당 어노테이션의 사용 방법은 responseCode = "200", description="OK" 이러한 방식으로 특정 responseCode가 응답될 경우 설명을 보여주는 코드인데
원래 코드에서 사용하던 내용은 아래와 같다.
@ApiResponses({
@ApiResponse(responseCode = "200", description = "OK"),
@ApiResponse(responseCode = "400", description = "BAD REQUEST"),
@ApiResponse(responseCode = "404", description = "NOT FOUND"),
@ApiResponse(responseCode = "500", description = "INTERNAL SERVER ERROR")
})
많은 코드중 제일 많이 사용되는 200, 400, 404, 500 코드를 항상 컨트롤러에 사용하기에는 너무 코드가 길어 커스텀 어노테이션을 만들게 되었다.
제일먼저 해야할 일은 특정 인터페이스를 만들어야 한다.
public @interface 어노테이션명 {
}
우리가 사용할 어노테이션의 명칭은 해당 파일명으로 사용한다. 즉 어노테이션명에 TestAnnotation이 들어가서
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@ApiResponses({
@ApiResponse(responseCode = "200", description = "OK"),
@ApiResponse(responseCode = "400", description = "BAD REQUEST"),
@ApiResponse(responseCode = "404", description = "NOT FOUND"),
@ApiResponse(responseCode = "500", description = "INTERNAL SERVER ERROR")
})
public @interface TestAnnotation이 {
}
@TestAnnotation이
public class Test(){
public void A(){
}
}
이런 파일을 생성한다면 앞으로 다른 class 파일에서 해당 어노테이션을 사용할 경우 @TestAnnotation으로 사용한다.
커스텀 어노테이션을 사용할떄 사용해야 하는 기본 어노테이션이 존재한다.
1. Target - 어노테이션을 적용할 위치
- ElementType.ANNOTATION_TYPE
- 어노테이션 타입 선언
- ElementType.PACKAGE
- 패키지 선언
- ElementType.CONSTRUCTOR
- 생성자 선언
- ElementType.TYPE
- 타입 선언
- ElementType.FIELD
- 멤버 변수 선언
- ElementType.LOCAL_VARIABLE
- 지역 변수 선언
- ElementType.METHOD
- 메서드 선언
- ElementType.PARAMETER
- 전달인자 선언
- ElementType.TYPE_PARAMETER
- 전달인자 타입 선언
- ElementType.TYPE_USE
- 타입 선언
2. Retention - 해당 어노테이션이 언제까지 유지되는지 설정
- RetentionPolicy.SOURCE
- 컴파일전까지만 존재
- 코드 분석에 사용
- RetentionPolicy.CLASS
- 컴파일러가 클래스를 참조할 때까지 유효
- 기본값
- 다른 툴이 바이트코드를 분석할 떄 사용
- RetentionPolicy.RUNTIME
- 런타임시에도 JVM에 의해서 유지
- 프레임워크나, 라이브러리에서 사용하는 어노테이션
'study > spring' 카테고리의 다른 글
Spring Boot에서 커스텀 어노테이션 작성법 (1) | 2024.06.13 |
---|---|
네이버 메일 보내기 (0) | 2024.05.27 |
Jpa @CreateData어노테이션 (0) | 2023.12.11 |
JPA 설정 (0) | 2023.11.21 |
Thymeleaf 설정 (0) | 2023.11.21 |