스프링 부트 Custom Annotation(커스텀 어노테이션), GET 요청 ~ JSON 응답

March 16, 2021

스프링 부트 Custom Annotation(커스텀 어노테이션), GET 요청 ~ JSON 응답

Custom Annotation

프로그램에 관한 데이터를 제공하거나 코드에 정보를 추가할 때 사용하는 것을 어노테이션이라고 한다. 대표적인 어노테이션으로는 @Controller, @SpringBootApplication등이 있다. 하지만 위 예시 어노테이션들은 이미 만들어진 어노테이션들이고, 직접 커스텀해서 어노테이션을 만들 수 있는데, 이것을 커스텀 어노테이션이라고 한다.

Custom Annotation 만들기

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExclusion {
  ...
}

@interface를 추가하여 어노테이션으로 만들수 있다.

@Target

어노테이션이 생성될 수 있는 위치를 지정하는 어노테이션이다.

이름 설명
PACKAGE 패키지 선언 시
TYPE 타입(클래스, 인터페이스, enum) 선언 시
CONSTUCTOR 생성자 선언 시
FIELD enum 상수를 포함한 멤버변수 선언 시
METHOD 메소드 선언시
ANNOTATION_TYPE 어노테이션 타입 선언 시
LOCAL_VARIABLE 지역변수 선언 시
PARAMETER 파라미터 선언 시
TYPE_PARAMETER 파라미터 타입 선언 시

@Retention

어노테이션이 언제까지 유효할지 정하는 어노테이션입니다.

이름 설명
RUNTIME 컴파일 이후에도 참조 가능
CLASS 클래스를 참조할 때 까지 유효
SOURCE 컴파일 이후 어노테이션 정보 소멸

Custom Annotation REST API Test

// CoffeeController.java

@RestController
public class CoffeeController {
  ...
  @ResponseBody
  @GetMapping("/americano")
  public void americano(){
    Coffee coffee = new Coffee();
    coffee.setTitle("americano");

    return coffee
  }

  @ResponseBody
  @GetMapping("/espresso")
  public void espresso(){
    Coffee coffee = new Coffee();
    coffee.setTitle("espresso");

    return coffee
  }

  @ResponseBody
  @GetMapping("/")
  public void findAll(){
    Coffee coffee = new Coffee();
    coffee.setTitle("americano, espresso");

    return coffee;
  }
}

Request

GET : http://api.domain.com/coffee/americano // {"americano"}
GET : http://api.domain.com/coffee/espresso // {"espresso"}
GET : http://api.domain.com/coffee/espresso // {"americano, espresso"}

Written by Jeon Byung Hun 개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트