복붙노트

[SPRING] Spring 데이터 나머지 : 다른 객체의 키로 검색하는 방법?

SPRING

Spring 데이터 나머지 : 다른 객체의 키로 검색하는 방법?

Spring-Data-Rest에서 객체의 ID는 객체와 함께 반환 된 URI입니다. 예를 들어 사용자가있는 경우 다음과 같은 URI가있을 수 있습니다.

http://example.com/users/1

진정한 REST API에서이 URI는 객체의 ID이며, ID로 '1'을 사용하지 않아야합니다.

그 사용자에게 속한 모든 주문을 검색하려면 어떻게합니까?

http://example.com/orders/search/findByUser?user={{XXX}}

특히 {{XXX}}의 용도는 무엇입니까?

반대의 검색을 할 수 있다는 것을 알고 있습니다.

http://example.com/users/1/orders

그러나 필자의 경우 일치하는 작업을 검색해야하므로 키인 추가 매개 변수를 추가 할 수 있습니다.

OrderRepository에서이 함수 정의를 작성하여 / orders / search / findByUser를 내보낼 수 있습니다.

목록 findByUser (사용자 사용자);

그리고 findByUser는 Spring-Data-REST에 의해 익스포트 될 것이지만 어떻게 GET 매개 변수로 사용자를 지정합니까?

다시 말하면, Spring Data Rest 프로젝트가 순결을 장려하기 위해 노력하고 있기 때문에 특별히 REST 솔루션을 찾고 있습니다.

해결법

  1. ==============================

    1.Spring 데이터의 Query 어노테이션을 살펴볼 수있다. 이를 통해 사용자 정의 컨트롤러 없이도 사용자 정의 쿼리를 실행할 수 있습니다.

    Spring 데이터의 Query 어노테이션을 살펴볼 수있다. 이를 통해 사용자 정의 컨트롤러 없이도 사용자 정의 쿼리를 실행할 수 있습니다.

    편집하다:

    쿼리 매개 변수는 간단한 속성으로 리소스를 필터링하는 좋은 방법입니다. SDR은 모든 복잡한 유형을 관계로 직렬화하므로 필터링이 나머지 (단순한) 속성에만 적용된다는 것이 훨씬 명확합니다. 릴레이션이 하나뿐이라면 / users / 1 / orders를 사용하여 호출 한 것과 같이 '역 검색'을 수행하는 방법을 올바르게 언급했습니다. 여러 관계로 검색하려면 별도의 검색 (하위) 리소스를 정의하고이 리소스에 POST 요청을 발행하여 검색을 수행하는 것이 좋습니다. 예 :

    POST /orders/search
    {
        "user": "http://example.org/users/1",
        ...
    }
    

    이렇게하면 SDR은 URI를 엔터티로 올바르게 변환합니다. 그러나 여기서 사용자 정의 컨트롤러를 사용해야한다고 생각하지만 스프링 데이터 저장소를 사용하고 사용자 및 추가 엔티티를 매개 변수로 제공 할 수 있어야합니다.

    자세한 내용은 다음 SO 질문을 참조하십시오.

    RESTful 검색 / 필터링을 설계하는 방법? 검색을위한 RESTful URL 디자인

    첫 번째 :

    검색을 위해 POST를 사용하여 REST 사양을 위반한다는 점을 해결합니다.

    REST는 단순하도록 설계되었습니다. REST의 핵심 장점 중 하나는 당신이 아무 것도하지 않아도된다는 것입니다. 요구 사항에 맞을 때까지 사양을 조정할 수 있습니다. 물론 이것은 API가 덜 RESTful하다는 것을 의미 할 수 있지만 API 소비자에게 불필요한 오버 헤드가 발생할 경우 API를 엄격히 준수해야 할 가치가 있는지 고려해야합니다.

    물론 REST 사양을 완전히 만족시킬 수있는 아이디어를 디자인 할 수 있습니다. 이것은 별도의 검색 엔티티를 생성하여 데이터베이스에 유지하고 나중에 / result 나 이와 비슷한 하위 리소스를 호출하여 검색 결과를 검색하는 것과 관련됩니다. 그러나 그것이 가치가 있다면 문제가됩니다.

    귀하의 구체적인 예를 들어, 나는 클라이언트가 링크에서 ID를 구문 분석하고 쿼리 매개 변수로 제공하도록 요구합니다. 나중에 응용 프로그램을 확장하는 경우 명명 된 검색과 같은 기능을 도입하고 위에서 언급 한 솔루션을 적용 할 수 있습니다.

  2. ==============================

    2.컨트롤러를 사용하는 경우, 사용자가 생각하는 것처럼 컨트롤러는 필요한 것으로 간주되는 매개 변수를 전달할 수 있습니다. 이 질문을보십시오 :

    컨트롤러를 사용하는 경우, 사용자가 생각하는 것처럼 컨트롤러는 필요한 것으로 간주되는 매개 변수를 전달할 수 있습니다. 이 질문을보십시오 :

    Spring 데이터 REST 커스텀 질의 통합

  3. ==============================

    3.https://jira.spring.io/browse/DATAREST-502를 참조하십시오.

    https://jira.spring.io/browse/DATAREST-502를 참조하십시오.

    스프링 데이터 버전에 따라 원하는대로 작동합니다. 그건 그렇고, 나는 여전히 POST가 옵션이되어야한다고 생각한다. 훨씬 더 깨끗하다.

  4. from https://stackoverflow.com/questions/28054232/spring-data-rest-how-to-search-by-another-objects-key by cc-by-sa and MIT license