• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

EntityModel Deprecated 어떻게 바꾸면 될까요?

21.04.29 16:56 작성 조회수 1.01k

1

EntityModel  Deprecated 라고 되어 있는데 

어떻게 변경하면 될까요?

답변 1

답변을 작성해보세요.

14

안녕하세요, 이도원입니다. 

Spring HATEOAS 1.x가 추가되면서, 사용법에 변화가 생겼습니다. 

EntityModel과 CollectionModel의 생성자가 Deprecated 되고, of() 메소드를 사용하도록 가이드하고 있습니다. 아래 코드를 참고해서 작성해 보시기 바랍니다. 

pom.xml

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>

UserController.java

//import org.springframework.hateoas.Resource;
//import org.springframework.hateoas.Resources;
//import org.springframework.hateoas.mvc.ControllerLinkBuilder;
//import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
//import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
import org.springframework.hateoas.CollectionModel;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;

...

// 전체 사용자 목록
@GetMapping("/users2")
public ResponseEntity<CollectionModel<EntityModel<User>>> retrieveUserList2() {
List<EntityModel<User>> result = new ArrayList<>();
List<User> users = service.findAll();

for (User user : users) {
EntityModel entityModel = EntityModel.of(user);
entityModel.add(linkTo(methodOn(this.getClass()).retrieveAllUsers()).withSelfRel());

result.add(entityModel);
}

return ResponseEntity.ok(CollectionModel.of(result, linkTo(methodOn(this.getClass()).retrieveAllUsers()).withSelfRel()));
}

// 사용자 상세 정보
@GetMapping("/users/{id}")
public ResponseEntity<EntityModel<User>> retrieveUser(@PathVariable int id) {
User user = service.findOne(id);

if (user == null) {
throw new UserNotFoundException("id-" + id);
}

EntityModel entityModel = EntityModel.of(user);

WebMvcLinkBuilder linkTo = linkTo(methodOn(this.getClass()).retrieveAllUsers());
entityModel.add(linkTo.withRel("all-users"));
return ResponseEntity.ok(entityModel);
}

결과 화면


빠른 시일내에, 업데이트 된 버전으로 강의 업데이트 하겠습니다. ^^;

감사합니다.