콘텐츠로 건너뛰기

Spring Data Rest URL 생성 분석

최근 업무에서 /api/entities이란 URL이 존재하는데, 아무리 Source를 뒤져봐도 해당 URL을 찾을 수 없었다.

몇 번 삽질을 하다가 결국 spring-data-rest를 사용했음을 알게 되었고, 해당 Library를 초기 분석한 내용을 기록해둔다.
공식문서1에 따르면 dependency는 아래처럼 설정해주면 된다.

그리고 기본 BaseUrl은 아래처럼 설정할 수 있다. (구성에 따라 아래 3가지 방법중 어느 것을 선택해도 동작한다)

위 설정으로 인해 앞으로 자동으로 생성되는 모든 Rest URL은 /api하위에 생성된다.

EVO_INFLECTOR_ISPRESENT라는 것은 org.atteo.evo.inflector.English가 classpath에 존재하는지 체크하는 것이고,
일반적인 경우라면 spring dependency로 가져왔을테니까 일반적으로는 true값이 된다.

EvoInflectorTypeBasedCollectionResourceMapping.java는 TypeBasedCollectionResourceMapping.java를 래핑한다.
class type이라는 것은 rest api를 생성할 entity의 class name인데, uncapitalize()를 통과하면서 첫자가 소문자로 변경된다.
그리고 EvoInflectorTypeBasedCollectionResourceMapping.java를 실행해서 영어 기준의 복수형으로 변환하여 준다.

EvoInflectorTypeBasedCollectionResourceMapping.java의 English.java는 영어의 복수형을 제공하는 Library이다.
불규칙명사(Entity class name은 일반적으로 명사)인 경우도 모두 처리해주고 있다.
(단, person -> people은 처리되지 않고, persons라고 나온다)
자세한 건 evo-inflector2를 참고하면 좋을 것 같다.

생성되는 URL은 대략 아래와 같다.
아래 URL은 spring-data-rest-webmvc에서 제공하는 규칙을 따르는데, RepositoryEntityController.java를 참고하면 된다.

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다