2014-03-24 2 views
6

검색 자원에 대한 링크를 생성하려고합니다. 그래서, 내 검색에 대한 링크를 제공하는 자원을 만들려면 :Spring HATEOAS에서 쿼리 문자열 매개 변수를 추가하는 방법은 무엇입니까?

POST /resourcesearch 
{param1: "value1",param2:"value2"} 

는 응답은 다음과 같아야합니다

@Controller 
@RequestMapping("/resourcesearch") 
public class ResourceSearchController{ 
    @RequestMapping(method = RequestMethod.POST) 
    public ResponseEntity<ResourceSupport> createResourceSearch(@RequestBody ResourceDTO dto){ 
    ResourceSupport resource = new ResourceSupport(); 
    //... do something here to build query string based on "dto" 
    resource.add(linkTo(ResourceController.class).withRel("resources")); 
    return new ResponseEntity<ResourceSupport>(resource, HttpStatus.CREATED); 
    } 
} 
=========================================== 
@Controller 
@RequestMapping("/resources") 
public class ResourceController{ 
    @RequestMapping(method = RequestMethod.GET) 
    public ResponseEntity<CollectionDTO> listResources(@RequestParam("param1") String param1, @RequestParam("param2") String param2){ 
    ... 
    } 
} 

것은이 : 여기

{"links":[ 
    { 
    "rel":"self", 
    "href":"http://localhost:8080/resourcesearch" 
    }, 
    { 
    "rel":"resources", 
    "href":"http://localhost:8080/resources?param1=value1&param2=value2" 
    } 
} 

내 코드입니다 쿼리 문자열 매개 변수를 줄의 URL에 추가하는 방법을 알 수 없다는 것을 알고 있습니다.

resource.add(linkTo(ResourceController.class).withRel("resources")); 
,210

은 그 라인의 결과이기 때문이다 :

{ 
    "links" : [ 
    { 
     "rel":"resources", 
     "href":"http://localhost:8080/resources" 
    } 
    ] 
} 

어떤 아이디어?

답변

4

리소스에서 사용한 이름과 원하는 출력 사이에 몇 가지 (잠재적 인) 불일치가 있으므로 잘 매핑 할 수 없습니다.

어쨌든 methodOnControllerLinkBuilder이어야합니다. Here's 좋은 예가 당신을 가야합니다.

더 복잡한 예제의 경우 Spring HATEOAS의 unit tests이 좋은 예입니다.

+0

ResourceController 클래스의 @RequestMapping에 오타가있었습니다. 코드가 일관되도록 편집했습니다. – Neuquino