복붙노트

[SPRING] Spring Data로 특정 항목을 볼 때만 특정 필드를 노출합니까?

SPRING

Spring Data로 특정 항목을 볼 때만 특정 필드를 노출합니까?

저는 현재 스프링 부트를 사용하여 mongodb 백엔드가있는 REST API를 작성하고 있습니다. 항목 목록이 아닌 특정 항목을 볼 때만 특정 필드를 공개 할 수 있습니까?

예를 들어 사용자 목록을 볼 때 전자 메일, 이름 및 ID 만 표시하려면 다음과 같이하십시오.

/ {endpoint} / 사용자 확보

{
  "_embedded": {
  "users": [
    {
      "email": "some_email@gmail.com",
      "name": "some name",
      "id": "57420b2a0d31bb6cef4ee8e9"
    }, 
    {
      "email": "some_other_email@gmail.com",
      "name": "some other name",
      "id": "57420f340d31cd8a1f74a84e"
    }
  ]
}

추가 입력란을 표시합니다 (예 : 주소 및 성별, 특정 사용자를 검색 할 때 :

/ {endpoint} / 사용자 수 / 57420f340d31cd8a1f74a84e 가져 오기

{
  "email": "some_other_email@gmail.com",
  "name": "some other name",
  "address": "1234 foo street"
  "gender": "female"
  "id": "57420f340d31cd8a1f74a84e"
}

주어진 사용자 클래스 :

public class User {

    private String id;
    private String email;
    private String address;
    private String name;
    private String gender;

...
}

해결법

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

    1.Spring Data REST를 사용할 때 특별히 이것을 위해 설계된 것이 있습니다. 투영 및 발췌의 개념이 있으며,이를 반환 할 대상과 방법을 지정할 수 있습니다.

    Spring Data REST를 사용할 때 특별히 이것을 위해 설계된 것이 있습니다. 투영 및 발췌의 개념이 있으며,이를 반환 할 대상과 방법을 지정할 수 있습니다.

    먼저 원하는 필드 만 포함 할 인터페이스를 만듭니다.

    @Projection(name="personSummary", types={Person.class})
    public interface PersonSummary {
        String getEmail();
        String getId();
        String getName();
    }
    

    그런 다음 PersonRepository에서 이것을 사용할 기본값으로 추가하십시오 (콜렉션을 리턴하는 메소드에만 적용됨).

    @RepositoryRestResource(excerptProjection = PersonSummary.class)
    public interface PersonRepository extends CrudRepository<Person, String> {}
    

    그런 다음 컬렉션에 대한 쿼리를 수행 할 때 프로젝션에 지정된 필드 만 가져올 수 있으며 단일 인스턴스를 가져올 때 전체 개체를 가져옵니다.

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

    2.저장소의 find 메소드에 @Query 어노테이션을 추가하고 fields 매개 변수를 지정해야합니다.

    저장소의 find 메소드에 @Query 어노테이션을 추가하고 fields 매개 변수를 지정해야합니다.

    public interface PersonRepository extends MongoRepository<Person, String>
    
      @Query(value="{ 'firstname' : ?0 }", fields="{ 'firstname' : 1, 'lastname' : 1}")
      List<Person> findByThePersonsFirstname(String firstname);
    
    }
    

    참조 : http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongodb.repositories.queries.json-based

  3. from https://stackoverflow.com/questions/37449040/only-expose-certain-fields-when-viewing-specific-item-with-spring-data by cc-by-sa and MIT license