I'm trying to generate a link to search resources. So, I want to create a resource that provides a link to my search:
POST /resourcesearch
{param1: "value1",param2:"value2"}
The response should be:
{"links":[
{
"rel":"self",
"href":"http://localhost:8080/resourcesearch"
},
{
"rel":"resources",
"href":"http://localhost:8080/resources?param1=value1¶m2=value2"
}
}
Here is my code:
@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){
...
}
}
The thing is that I can't figure out how to add query string parameters to the url in the line:
resource.add(linkTo(ResourceController.class).withRel("resources"));
Because the result of that line is:
{
"links" : [
{
"rel":"resources",
"href":"http://localhost:8080/resources"
}
]
}
Any ideas?
There are a couple of (potential) mismatches between the names that you have used in your resources and desired output, hence I am not able to map that very well.
Anyway, you need to use the methodOn
of ControllerLinkBuilder
. Here's a good example that should get you going.
For more complex examples, the unit tests for Spring HATEOAS are a good source of examples.