Search code examples
javaspringspring-boothateoasspring-hateoas

Spring Hateoas Ignoring Query Parameters


Spring Hateoas is not creating the appropriate link for the following request mapping:

@GetMapping("/member/{id}")
public MemberResource getMemberById(@RequestParam String id){
     Member member = MemberService.getMemberById(id);
     return new MemberResource(member);
}


public class MemberResource extends ResourceSupport{

     public MemberResource(Member member){
  add(linkTo(methodOn(MemberController.class).getMember(member.getId)).withSelfRel());
        add(linkTo(methodOn(TeamsController.class).getTeams(memberId)).withRel("teams"));
        }}


        @GetMapping("/teams")
        public List<TeamResource> getTeamsById(@RequestParam String id)          {
            List<Team> teams = teamService.getTeamsById(id);
            return teams.stream().map(TeamResource::new).collect(Collectors.toList());
        }

When calling /member/12345 would expect to to return:

{
     member: {
       //omitted for brevity
     },
    _links:[
       {
         href: .../members/12345
       },
       {
         href: ../teams?memberId = 12345
       }

      ]
}

But instead it returns:

{
     member: {
       //omitted for brevity
     },
    _links:[
       {
         href: .../members/12345
       },
       {
         href: ../teams/12345
       }

      ]
}

Why is this? It is completely ignoring the filter even though I am using @RequestParam. Any advice is appreciated in this matter.


Solution

  • Disclaimer: never used Spring HATEOAS.

    But at first glance it looks like you're mixing up two URL-Parameter types:

    • @PathVariable for Path variables like .../teams/TEAM_ID
    • @RequestParam for Query Parameters like .../teams?id=TEAM_ID