Spring HATEOAS PresentationModelAssembler toCollectionModel () - PullRequest
0 голосов
/ 19 июня 2020

Я создаю приложение Spring Boot HATEOAS REST. В приведенном ниже коде показано, как я добавляю ссылки, а запрос GET отправляется для указанного c Employee. Я использую функцию RepresentationModelAssembler toModel. Также есть функция toCollectionModel для Override, которую я хотел бы использовать для преобразования List<Employees> в CollectionModel. -> Это будет возвращено в / Employees / all endpoint.

И я не знаю, как это сделать. Итак, мне нужно передать List<Employees>, тогда все элементы списка должны быть обработаны функциями toModel, а затем, как в функции toModel, мне нужна возможность добавить к нему больше ссылок -> ссылки на всю новую коллекцию (не по отдельности).

Жду ваших ответов!

@Component
public class EmployeeModelAssembler implements RepresentationModelAssembler<Employee, EntityModel<Employee>> {

    @Override
    public EntityModel<Employee> toModel(Employee employee) {
        EntityModel<Employee> employeeEntityModel = EntityModel.of(employee);

        Link selfLink = linkTo(methodOn(EmployeeController.class).getEmployeeById(employee.getId())).withSelfRel();
        employeeEntityModel.add(selfLink);

        return employeeEntityModel;
    }

    @Override
    public CollectionModel<EntityModel<Employee>> toCollectionModel(Iterable<? extends Employee> entities) {

        ?? ?? ??

    }
}

1 Ответ

1 голос
/ 25 июля 2020

Вы можете использовать что-то вроде этого:

@GetMapping(produces = { "application/hal+json" })
public CollectionModel<Customer> getAllCustomers() {
    List<Customer> allCustomers = customerService.allCustomers();
 
    for (Customer customer : allCustomers) {
        String customerId = customer.getCustomerId();
        Link selfLink = linkTo(CustomerController.class).slash(customerId).withSelfRel();
        customer.add(selfLink);
        if (orderService.getAllOrdersForCustomer(customerId).size() > 0) {
            Link ordersLink = linkTo(methodOn(CustomerController.class)
              .getOrdersForCustomer(customerId)).withRel("allOrders");
            customer.add(ordersLink);
        }
    }
 
    Link link = linkTo(CustomerController.class).withSelfRel();
    CollectionModel<Customer> result = CollectionModel.of(allCustomers, link);
    return result;
}

Посетите https://www.baeldung.com/spring-hateoas-tutorial#springhateoasinaction для подробного объяснения

...