Spring HATEOAS: Параметры запроса отображаются в виде переменной пути в ссылке

#spring #spring-boot #spring-mvc #spring-hateoas

Вопрос:

В моем весеннем проекте HATEOAS я отправляю следующий URI для запроса GET,

 http://localhost:8080/emp_db/api/v4/employees/?firstName=Tom
 

Но ссылка в ответе отображается следующим образом,

 _links": {
        "employees": {
            "href": "http://localhost:8080/emp_db/api/v4/employees/{?firstName,lastName,email}",
            "templated": true
        }
    }
 

Похоже, что параметры запроса отображаются внутри в виде переменной пути. Правильно ли это? Я ожидал, что ссылка будет больше похожа,

 http://localhost:8080/emp_db/api/v4/employees/?firstName=Tom,lastName=,email=
 

Мой код выглядит следующим образом,

 @GetMapping 
    public CollectionModel<EntityModel<Employee>> get(@RequestParam Optional<String> firstName,
                                                      @RequestParam Optional<String> lastName,
                                                      @RequestParam Optional<String> email) {
        
        LOGGER.trace("Getting employees: {} {} {}", firstName, lastName, email);
        
        return CollectionModel.of(employeeService.findByFieldsLike(firstName, lastName, email)
                                                 .stream()
                                                 .map(assembler::toModel)
                                                 .collect(Collectors.toList()),
                                                 linkTo(methodOn(APIControllerV4.class)
                                                            .get(Optional.empty(), Optional.empty(), Optional.empty()))
                                                            .withRel("employees"));
    }
    
    
    @GetMapping("/{id}")
    public EntityModel<Employee> get(@PathVariable long id) {
        
        LOGGER.trace("Getting employee: {}", id);
        
        return employeeService.findById(id)
                              .map(assembler::toModel)
                              .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND,
                                                                             String.format("Employee %d not found", id)));
    }

Override
    public EntityModel<Employee> toModel(Employee entity) {

        return EntityModel.of(entity, linkTo(methodOn(APIControllerV4.class).get(entity.getId())).withSelfRel(),
                                      linkTo(methodOn(APIControllerV4.class)
                                                .get(Optional.empty(), Optional.empty(), Optional.empty()))
                                                .withRel("employees"));
    }