Developer Cafe

HATEOAS 헤테우스 본문

Spring

HATEOAS 헤테우스

개발자 카페 2022. 12. 6. 18:54
728x90
 클라이언트가 서버로부터 어떠한 요청을 할 때, 요청에 필요한 URI를 응답에 포함시켜 반환하는 것입니다

한명의 정보를 response해주는 api를 만듬과 동시에 유저 모두의 정보를 가진 api주소를 담아 주는 api를 만든다고 가정합니다.

 

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

    private Integer id;
    
    @Size(min=2, message = "Name은 2글자 이상 입력해 주세요.")
    private String name;
    
    @Past
    private Date joinDate;

    private String password;
    
    private String ssn;
}
// spring 2.1.8 이하 버전
@GetMapping("/users/{id}")
public Resource<User> retrieveUser(@PathVariable int id) {
    User user = service.findOne(id);

    if (user == null) {
        throw new UserNotFoundException(String.format("ID[%s] not found", id));
    }

    // HATEOAS
    Resource<User>  resource = new Resource<>(user);
    ControllerLinkBuilder linkTo = linkTo(methodOn(this.getClass()).retrieveAllUsers());
    resource.add(linkTo.withRel("all-users"));

    return resource;
}

// spring 2.2 이상 버전
@GetMapping("/users/{id}")
public EntityModel<User> retrieveUser(@PathVariable int id) {
    User user = service.findOne(id);

    if (user == null) {
        throw new UserNotFoundException(String.format("ID[%s] not found", id));
    }

    // HATEOAS
    EntityModel<User> model = new EntityModel<>(user);
    WebMvcLinkBuilder linkTo = linkTo(methodOn(this.getClass()).retrieveAllUsers());
    model.add(linkTo.withRel("all-users"));

    return model;
}

결과

{
    "id": 1,
    "name": "gwise",
    "joinDate": "2021-04-29T08:04:34.838+00:00",
    "password": "pass1",
    "ssn": "770530",
    "_links": {
        "all-users": {
            "href": "http://localhost:8088/users"
        }
    }
}
728x90

'Spring' 카테고리의 다른 글

테스트 주도 개발 TDD  (0) 2021.03.10
HttpServletResponse를 통해 컨트롤러에서 출력하기  (0) 2021.02.18
Comments