spring-hateoas icon indicating copy to clipboard operation
spring-hateoas copied to clipboard

Creating links with query params that are objects

Open johannesgiani opened this issue 3 years ago • 3 comments
trafficstars

I want to create a link to a controller method that does not use single @RequestParam annotations for each query parameter. Instead I pass an object containing all query parameters. This works fine despite that the self link I am constructing does not contain the query parameters that I am passing:

  @GetMapping
  public PagedModel<EntityModel<FooDto>> findBy(
      @Valid Query query,
      @PageableDefault(size = 5) Pageable pageable,
      PagedResourcesAssembler<FooDto> assembler) {
    final Link link =
        linkTo(methodOn(Controller.class).findBy(query, pageable, assembler))
            .withSelfRel()
            .expand();
   
    final Page<FooDto> fooList = fooService.findBy(query, pageable);
    return assembler.toModel(fooList, link);
  }

The result I get when requesting http://localhost:8080/foo?param1=bar looks like this:

{
    "_links": {
        "self": {
            "href": "http://localhost:55560/foo"
        }
    },
    "page": {
        "size": 5,
        "totalElements": 0,
        "totalPages": 0,
        "number": 0
    }
}

It does not contain the query parameters in the self link. Any chance to make this work? I cannot find any documentation on query parameters when building links expect this one here: https://docs.spring.io/spring-hateoas/docs/current/reference/html/#server.link-builder.webmvc.methods.request-params which does not help me.

Thanks in advance :)

johannesgiani avatar Jul 14 '22 16:07 johannesgiani

I want to create a link to a controller method that does not use single @RequestParam annotations for each query parameter. Instead I pass an object containing all query parameters. This works fine despite that the self link I am constructing does not contain the query parameters that I am passing:

  @GetMapping
  public PagedModel<EntityModel<FooDto>> findBy(
      @Valid Query query,
      @PageableDefault(size = 5) Pageable pageable,
      PagedResourcesAssembler<FooDto> assembler) {
    final Link link =
        linkTo(methodOn(Controller.class).findBy(query, pageable, assembler))
            .withSelfRel()
            .expand();
   
    final Page<FooDto> fooList = fooService.findBy(query, pageable);
    return assembler.toModel(fooList, link);
  }

The result I get when requesting http://localhost:8080/foo?param1=bar looks like this:

{
    "_links": {
        "self": {
            "href": "http://localhost:55560/foo"
        }
    },
    "page": {
        "size": 5,
        "totalElements": 0,
        "totalPages": 0,
        "number": 0
    }
}

It does not contain the query parameters in the self link. Any chance to make this work? I cannot find any documentation on query parameters when building links expect this one here: https://docs.spring.io/spring-hateoas/docs/current/reference/html/#server.link-builder.webmvc.methods.request-params which does not help me.

Thanks in advance :)

Did you solve it, I have the same problem

dingjiefeng avatar Nov 07 '22 13:11 dingjiefeng

Hello !

Any update ?

mawsfr-adeo avatar Jan 09 '24 08:01 mawsfr-adeo

Hello, is it solved now?

rivon0507 avatar Jul 31 '24 13:07 rivon0507