Error on generating self link on pageable resource

Viewed 522

Make a simple RestController

@RestController
public class Controloler
    @Value
    class MyData {
        int value;
    }

    @GetMapping(value = "/datas", produces = MediaTypes.HAL_JSON_VALUE)
    public PagedResources<Resource<MyData>> getMyData(PagedResourcesAssembler<MyData> assembler,
                                                              @RequestParam(required = false) String param,
                                                              @PageableDefault Pageable pageRequest)
    {
        MyData data = new MyData(1);
        Page<MyData> page = new PageImpl<>(Collections.singletonList(data), pageRequest, 100);
        Link selfLink = linkTo(methodOn(Controloler.class).getMyData(assembler, param, pageRequest)).withSelfRel();
        return assembler.toResource(page, selfLink);
    }

}

When I try to get page curl "http://localhost:8080/datas?param=12&page=2" have a problem with self link generation

{
  "_embedded": {
    "myDataList": [
      {
        "value": 1
      }
    ]
  },
  "_links": {
    "first": {
      "href": "http://localhost:8080/datas?param=12&page=0&size=10"
    },
    "prev": {
      "href": "http://localhost:8080/datas?param=12&page=1&size=10"
    },
    "self": {
      "href": "http://localhost:8080/datas?param=12"
    },
    "next": {
      "href": "http://localhost:8080/datas?param=12&page=3&size=10"
    },
    "last": {
      "href": "http://localhost:8080/datas?param=12&page=9&size=10"
    }
  },
  "page": {
    "size": 10,
    "totalElements": 100,
    "totalPages": 10,
    "number": 2
  }
}

In my opinion, self link should be http://localhost:8080/datas?param=12&page=2&size=10.

Just now I can solve this problem without using pageable in arguments, just exact params page and size. But, I hope there is some solution with pageable

I've seen that in case of spring-data-rest self have a type of template. But I'd like to get the url I've requested

2 Answers
Related