Skip to content

Instantly share code, notes, and snippets.

@susimsek
Last active March 14, 2022 09:43
Show Gist options
  • Save susimsek/4350c96adb616a80a7f777cf5579d2c8 to your computer and use it in GitHub Desktop.
Save susimsek/4350c96adb616a80a7f777cf5579d2c8 to your computer and use it in GitHub Desktop.
Hateoas Assembler
@Component
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor
public class CapabilityModelAssembler implements RepresentationModelAssembler<Capability, CapabilityDto> {
final PagedResourcesAssembler<Capability> pagedResourcesAssembler;
final CapabilityMapper capabilityMapper;
@Override
public CapabilityDto toModel(Capability entity) {
CapabilityDto resource = capabilityMapper.toDto(entity);
addLinks(resource);
return resource;
}
@Override
public CollectionModel<CapabilityDto> toCollectionModel(Iterable<? extends Capability> entities) {
CollectionModel<CapabilityDto> resources = RepresentationModelAssembler.super.toCollectionModel(entities);
addLinks(resources);
return resources;
}
public PagedModel<CapabilityDto> toPagedModel(Page<Capability> page) {
PagedModel<CapabilityDto> resources = pagedResourcesAssembler.toModel(page, this);
addLinks(resources);
return resources;
}
public void addLinks(CapabilityDto resource) {
resource.add(linkTo(methodOn(CapabilityController.class).getCapability(resource.getId())).withSelfRel());
resource.add(linkTo(methodOn(CapabilityController.class).getAllCapabilities()).withRel(CAPABILITIES));
}
public void addLinks(CollectionModel<CapabilityDto> resources) {
resources.add(linkTo(methodOn(CapabilityController.class).getAllCapabilities()).withRel(CAPABILITIES));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment