이 예제에서 먼저 한 일은 getLicense() 메서드에 @GetMapping 애너테이션을 추가한 것이다. 두 매개변수(value와 method)를 전달받는 @RequestMapping(value="/{licenseId}", method=RequestMethod.GET) 애너테이션도 같은 용도로 사용할 수 있다. 메서드용 @GetMapping 애너테이션을 사용해서 getLicense() 메서드에 대해 다음과 같은 엔드포인트를 만들 수 있다.
v1/organization/{organizationId}/license/{licenseId}
왜 그럴까? 클래스 맨 윗부분을 보면 컨트롤러에 유입되는 모든 HTTP 요청과 매칭되는 최상위 레벨 애너테이션을 지정했다. 즉, 먼저 최상위 레벨 애너테이션 값을 추가한 후 메서드 레벨 값을 추가했다. 두 번째 애너테이션의 매개변수인 method는 메서드와 매칭하는 데 사용하는 HTTP 동사를 지정한다. getLicense() 메서드에서 RequestMethod.GET 열거형으로 제공된 GET 메서드와 일치한다.
코드 3-4에서 두 번째로 주목할 것은 getLicense() 메서드의 매개변수에 있는 @PathVariable 애너테이션이다. 이것은 수신 URL에 전달된 매개변수 값({parameterName} 구문으로 표시)을 메서드의 매개변수에 매핑한다. 코드 3-4의 GET 서비스는 URL로 전달된 두 매개변수(organizationId와 licenseId)를 메서드의 매개변수에 매핑한다.
@PathVariable("organizationId") String organizationId @PathVariable("licenseId") String licenseId
마지막으로 ResponseEntity 반환 객체를 살펴보자. ResponseEntity는 상태 코드, 헤더, 바디를 포함한 모든 HTTP 응답을 나타낸다. 이전 코드에서는 바디(body)로 License 객체와 200(OK) 상태 코드를 반환할 수 있다.