UsersModelAssembler.java

package es.um.atica.faker.users.adapters.rest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.web.PagedResourcesAssembler;
import org.springframework.hateoas.CollectionModel;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.PagedModel;
import org.springframework.hateoas.server.RepresentationModelAssembler;
import org.springframework.stereotype.Component;

import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;

import es.um.atica.faker.users.adapters.rest.dto.UserDTO;

@Component
public class UsersModelAssembler implements RepresentationModelAssembler<UserDTO,EntityModel<UserDTO>> {
    
    private static final String BASE_PATH = "/faker/v1/user/";

    @Autowired
    private PagedResourcesAssembler<UserDTO> pagedResourcesAssembler;

    @Override
    public EntityModel<UserDTO> toModel(UserDTO entity) {
        return EntityModel.of(entity,
            linkTo(UsersQueryRestController.class).slash(BASE_PATH + entity.getId()).withSelfRel(),
            linkTo(UsersCommandRestController.class).slash(BASE_PATH + entity.getId()).withRel("put"),
            linkTo(UsersCommandRestController.class).slash(BASE_PATH + entity.getId()).withRel("delete"));
    }

    @Override
    public CollectionModel<EntityModel<UserDTO>> toCollectionModel(Iterable<? extends UserDTO> entities) {
        PagedModel<EntityModel<UserDTO>> model = pagedResourcesAssembler.toModel((Page)entities, this);
        try {
            model.add(linkTo(methodOn(UsersCommandRestController.class).createUser(null, null, null, null)).withRel("post"));
        } catch (Exception ex) {}
        return model; 

    }

}