복붙노트

[SPRING] Spring 데이터 나머지 특정 저장소에 사용자 정의 끝점 추가

SPRING

Spring 데이터 나머지 특정 저장소에 사용자 정의 끝점 추가

기존 사용자 저장소에 사용자 지정 검색 끝점을 추가하고 싶습니다.

내 사용자 저장소는 다음과 같습니다.

@RepositoryRestResource(collectionResourceRel="users", path="users")
public interface UserRepository extends PagingAndSortingRepository<User, Long>{

    User findByUsername(String username);
}

맞춤 컨트롤러 :

@BasePathAwareController 
@RequestMapping("users/search")
public class CustomController implements ResourceProcessor<RepositorySearchesResource>, ResourceAssembler<User, Resource<User>> {
    @Autowired
    UserRepository userReposiotry;
    @Autowired
    private EntityLinks entityLinks;

    @RequestMapping(value = "findFirst", produces = "application/json")
    @ResponseBody
    public ResponseEntity<Resource<User>> findFirstUser() {
          Resource<User> resource = toResource(userReposiotry.findOne(1L));
          return new ResponseEntity<Resource<User>>(resource, HttpStatus.OK);
    }

    @Override
    public RepositorySearchesResource process(RepositorySearchesResource resource) {
        LinkBuilder lb = entityLinks.linkFor(User.class, "username");
        resource.add(new Link(lb.toString() + "/search/findFirst", "findFirst"));
        return resource;
    }

    @Override
    public Resource<User> toResource(User user) {
        Resource<User> resource = new Resource<User>(user);
        return resource;
    }
}

이렇게하면 사용자에 대한 올바른 검색 끝점이 반환됩니다.

{
  "_links": {
    "findByUsername": {
      "href": "http://localhost:8080/api/users/search/findByUsername"
    },
    "self": {
      "href": "http://localhost:8080/api/users/search"
    },
    "findFirst": {
      "href": "http://localhost:8080/api/users/search/findFirst",
      "templated": true
    }
  }
}

Invites와 같은 다른 엔드 포인트의 경우 :

{
  "_links": {
    "findUserByInvite": {
      "href": "http://localhost:8080/api/invites/search/findUserByInvite"
    },
    "self": {
      "href": "http://localhost:8080/api/invites/search"
    },
    "findFirst": {
      "href": "http://localhost:8080/api/invites/search/findFirst",
      "templated": true
    }
  }
}

이것은 어떻게 사용자에게만 제한 될 수 있습니까? 감사

해결법

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

    1.초대장 끝 점이 RepositorySearchesResource를 반환한다고 가정합니다. ResourceProcessor는 spring-data-rest가 RepositorySearchesResource를 직렬화 할 때마다 호출됩니다. 사용자와 초대에 대해 다른 링크를 원한다면 몇 가지 대안이 있습니다.

    초대장 끝 점이 RepositorySearchesResource를 반환한다고 가정합니다. ResourceProcessor는 spring-data-rest가 RepositorySearchesResource를 직렬화 할 때마다 호출됩니다. 사용자와 초대에 대해 다른 링크를 원한다면 몇 가지 대안이 있습니다.

  2. from https://stackoverflow.com/questions/34031913/spring-data-rest-add-custom-endpoint-to-specific-reposiotry by cc-by-sa and MIT license