본문 바로가기

- Spring

[Spring Hateoas1.2] ModelAssembler, ModelProcessor

반응형

이전 포스팅에서

https://halfstorage.tistory.com/61

 

[Spring Hateoas 1.2] HTTP Method에 헤이토스 적용

- POST 1 2 3 4 5 6 7 8 9 10 11   @PostMapping("/employees")   ResponseEntity newEmployee(@RequestBody Employee newEmployee) {     EntityModel  entityModel = EntityModel.of(reposito..

halfstorage.tistory.com

EntityModel.of(employee,

      linkTo(methodOn(EmployeeController.class).one(employee.getId())).withSelfRel(),

      linkTo(methodOn(EmployeeController.class).all()).withRel("employees"));

 

링크를 추가하는 부분이 중복적으로 사용되면 assembler로 선언하여 사용할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
@Component
public class EmployeeModelAssembler implements
    RepresentationModelAssembler<Employee, EntityModel<Employee>> {
 
  @Override
  public EntityModel<Employee> toModel(Employee employee) {
 
    return EntityModel.of(employee,
        linkTo(methodOn(EmployeeController.class).one(employee.getId())).withSelfRel(),
        linkTo(methodOn(EmployeeController.class).all()).withRel("employees"));
  }
}
 
 

 

이전 버전에 사용되던 ModelProcessor도 사용할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
@Component
public class EmployeeModelProcessor implements RepresentationModelProcessor<EntityModel<Employee>> {
 
  @Override
  public EntityModel<Employee> process(EntityModel<Employee> model) {
    model.add(Link.of("/employees/{id}").withRel(LinkRelation.of("employees"))
    .expand(Objects.requireNonNull(model.getContent()).getId()));
 
    return model;
  }
}


다만, 프로세스를 사용할 때는 해당 링크를 직접 입력했었는데, 현재 버전에서 어셈블러로 사용 시에는 해당 클래스의

메서드를 호출하여 추가할 수 있습니다.

반응형