스프링 HATEOAS에서 링크를 만들고 수정하는 방법을 이해하려고합니다.스프링 HATEOAS에 링크를 넣고 게시하는 방법
예를 들어, 내가 api/users와 api/event에서 각각 두 개의 콜렉션을 가지고 있다고 가정 해보십시오. 사용자 api/user/56을 이벤트 api/event/21에 연결하고 싶습니다. 인수를 위해 이것은 다 대다 - 사용자가 많은 이벤트에 참석할 수 있고, 이벤트에는 많은 사용자가있을 수 있습니다.
내가 이해하는 것처럼, 이것을하는 편안한 방법은 URI를 기본 키로 사용하는 것이므로 다음을 api/user/56/events에 게시 할 수 있습니다.
는{
attends: "http://localhost:9090/api/event/21"
}
엔드 포인트는이 I를 유지할 수 있도록 상기 제어기 (EventController.class) (여기서는 21)에 ID를 그 URL을 파싱하고 추출 할 수 있어야한다.
질문 1 : Spring Hateoas에서 REST API의 관계를 다루는 올바른 방법입니까?
질문 2 : I (예를 들어 해당 컨트롤러/방법, 기본 키 등 참조) 데이터에 사용 가능한 핸들
연구
을 컨트롤러에서이 URL을 해결할 수있는 방법RestTemplate은 요청 된 매핑 된 메소드 내부의 컨트롤러에서 데이터를 요청하는 데 사용할 수 있습니다. 아주 편안한 아니라이는 API에 노출 될 수 -
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<EventResource> response = restTemplate.getForEntity(attendsUrl, EventResource.class);
EventResource eventResource = response.getBody();
그러나 나는 eventResource 데이터의 일환으로 ID 필드를 반환해야한다고 생각하지 않습니다. 한 가지 방법은 매개 변수 "includePK = true"를 사용하는 것입니다.하지만 다시는 이것이 적절하지 않다고 생각합니다. 단지 문제를 숨기는 것입니다. 게다가이 방식으로 서버가 자신의 API를 요청한다는 생각은 순조롭게 보입니다.
업데이트
이 여기 https://github.com/spring-projects/spring-hateoas/issues/292에 대한 의문이있다. 느슨하게 일부 의견 (사용자에 의해 kevinconaway) 그 문제에서 나는 여기에 쉬운 해결책을 제공하는 빠른 유틸리티 클래스를 만들었습니다 : SpringHateoasUtils. 해결책은 아래로 내려 간다.
String mapping = DISCOVERER.getMapping(targetClass, targetMethod);
UriTemplate template = new UriTemplate(mapping);
//values is key/value map of parameters that the referenced method accepts
Map<String, String> values = uriTemplate.match(uri);
SpringHateoasUtils이 약간 더 좋은 수 있지만 기능이 있어야한다처럼 아직도 느낀다. 이것에 대한 봄 코드에서 뭔가를 얻으려고 노력할 것입니다.이 질문에 대답 할 것이 무엇인지 분명히 할 때. 여기에 대한 대답에서
와 실제 모델 인스턴스에이 URI를 해결'에 http : // localhost를 : 9090/API/이벤트/21' 만. HATEOAS은 URL을 역 참조하는 것을 돕지 않습니다.응답에만 사용되며 요청에는 사용되지 않습니다. [Spring Data REST] (http://projects.spring.io/spring-data-rest/) – zeroflagL
Spring HATEOAS를 몇 달 동안 사용해 본 결과, REST를 올바르게 지원하지 않는 것으로 보입니다. 설명하는 것과 유사한 해결 방법을 구현해야했습니다. –