2014-05-22 2 views
3

내가 사용자봄 HATEOAS 템플릿 링크 확장

예 컨트롤러 방법

@RequestMapping(value = "/persons", method = RequestMethod.GET, produces = "application/hal+json") 
public PersonsResource getPersons (@RequestParam(required = false, value = "name") String name, @RequestParam(required = false, value = "age") Integer age) { 
... 
    personsResource.add(ControllerLinkBuilder.linkTo(ControllerLinkBuilder.methodOn(PersonController.class).getPersons(name, age)).withSelfRel()); 
} 

이 방법을 사용할 수있는 필터 PARAMS을 강조하기 위해 출력에 템플릿 URL을 시도하고 대단한 기능을 연결 매개 변수없이 링크를 호출

_links: { 
    self: { 
     href: "http://myserver:8080/persons" 
    } 
} 

나타납니다하지만

싶습니다
href: "http://myserver:8080/persons?name={name}&age={age} 

하나 PARAM 후 공급 된 케이크에

href: "http://myserver:8080/persons?name={name}&age=21 

착빙이의 쿼리 매개 변수 될 경우 더 좋은 {...] 무시합니까?

스프링 HATEOAS API를 사용하면 가능합니까? 이 문제를 해결할 수 있었지만 API에 대한 합리적인 제안처럼 보입니다.

답변

0

프레임 워크는 아직 미성숙 한 것 같습니다.

나는 v.0.11.0.RELEASE가 있고 동일한 문제점이있다.

매개 변수 값을 제공하지 않으면 ControllerLinkBuilder.linkTo (methodOn) 호출의 결과로 템플릿 URL이 없습니다. 메소드 주석으로부터의 기본 경로입니다.

당신이 매개 변수 값을 제공하지만 당신처럼 정확히 말 : https://stackoverflow.com/some/service/path?name=SomeName&age=11 (내 경우 매개 변수는 다르지만 효과는 여기에서 볼 수있는 하나입니다)입니다 '개념적으로 올바른'URL이

해야

https://stackoverflow.com/some/service/path {?name,age}

그러나 스프링 HATEOAS는 이것을 지원하지 않습니다. 코드에 직접 추가하지 않는 한. 그것은 정말로 바람직하지 않습니다.

JavaEE에서 UriBuilder를 확인한 결과, 동일한 방식으로 작동하며 쿼리 매개 변수에 대한 템플릿이 지원되지 않았습니다.

3

ControllerLinkBuilder의 드롭 인 대체품으로 spring-hateoas-ext에서 AffordanceBuilder을 시도해 볼 수 있습니다. linkTo-methodOn 관용구에 정의되지 않은 채로있는 매개 변수에 대한 템플릿 변수를 만듭니다.

템플릿을 만들 수있을뿐만 아니라 RFC 5988 링크의 모든 기능을 제공하고 요청 본문에 대한 지식을 가지고 있으므로 양식 스타일 요청 설명자로 Hydra 또는 Html 또는 사이렌 응답을 렌더링 할 수 있습니다 .

면책 조항 : 저는 spring-hateoas-ext의 저자입니다.

0

이것은 최신 스프링 - hateoas 버전에서 언급되었습니다.

resource.add(linkTo(methodOn(Controller.class).method(null)).withSelfRel()); 
:
https://github.com/spring-projects/spring-hateoas/issues/169

당신은 같은 것을 사용하여 필요한 템플릿 URL을 얻을 수 있어야 다음과 같은 문제를 확인하실 수 있습니다