코드 3-9에서 강조해야 할 세 가지 중요한 사항이 있다. 첫 번째는 컨트롤러 자체에서 로케일을 전달받을 수 있다는 것이다. 두 번째는 전달받은 매개변수를 사용해서 messages.getMessage ("license.create.message", null, locale)을 호출할 수 있다는 것이고, 세 번째는 messages.getMessage("license.create", null, null)처럼 로케일 없이도 호출할 수 있다는 것이다. 이 시나리오에서 애플리케이션은 부트스트랩에 기정의된 디폴트 로케일을 사용한다. 이제 다음 코드에서 요청에 포함된 Accept-Language 헤더에서 언어를 수신받기 위해 컨트롤러의 createLicense() 메서드를 업데이트할 것이다.
@PostMapping public ResponseEntity<String> createLicense( @PathVariable("organizationId") String organizationId, @RequestBody License request, @RequestHeader(value="Accept-Language", required=false) Locale locale) { return ResponseEntity.ok(licenseService.createLicense( request, organizationId, locale)); }
이 코드에서 유의할 사항 중 하나는 요청 헤더 값을 메서드 매개변수에 매핑하는 @RequestHeader 애너테이션을 사용하는 것이다. 이 createLicense() 메서드는 요청 헤더인 Accept-Language에서 로케일을 가져온다. 이 서비스 매개변수는 필수가 아니므로 지정하지 않으면 디폴트 로케일을 사용한다. 그림 3-7은 포스트맨에서 Accept-Language 요청 헤더를 전송하는 방법을 보여 준다.