如何使用Spring HATEOAS添加查询字符串参数?

Neu*_*ino 7 java spring spring-hateoas

我正在尝试生成搜索资源的链接.所以,我想创建一个提供我的搜索链接的资源:

POST /resourcesearch
{param1: "value1",param2:"value2"}
Run Code Online (Sandbox Code Playgroud)

答复应该是:

{"links":[
  {
    "rel":"self",
    "href":"http://localhost:8080/resourcesearch"
  },
  {
    "rel":"resources",
    "href":"http://localhost:8080/resources?param1=value1&param2=value2"
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

@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){
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是我无法弄清楚如何将查询字符串参数添加到行中的url:

resource.add(linkTo(ResourceController.class).withRel("resources"));
Run Code Online (Sandbox Code Playgroud)

因为该行的结果是:

{
  "links" : [
    {
      "rel":"resources",
      "href":"http://localhost:8080/resources"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

TJ-*_*TJ- 5

您在资源中使用的名称与所需的输出之间有一些(潜在的)不匹配,因此,我无法很好地进行映射。

无论如何,你需要使用methodOnControllerLinkBuilder这是一个很好的例子,应该可以帮助您。

对于更复杂的示例,Spring HATEOAS 的单元测试是很好的示例来源。