스프링 HATEOAS 소개

HATEOAS

스프링 HATEOAS

스프링 HATEOAS의 기능

스프링 HATEOAS 적용

EventResource 만들기

RepresentationModel을 상속받은 Event Resource 생성

package me.jiho.demorestapi.event;

import org.springframework.hateoas.RepresentationModel;

public class EventResource extends RepresentationModel {

    private Event event;

    public EventResource(Event event) {
        this.event = event;
    }

    public Event getEvent() {
        return event;
    }
}

add 메소드를 이용해 eventResource에

		@PostMapping
    public ResponseEntity createEvent(@RequestBody @Valid EventDto eventDto, Errors errors) {
        if (errors.hasErrors()) {
            return ResponseEntity.badRequest()
                    .body(errors);
        }

        eventValidator.validate(eventDto, errors);

        if (errors.hasErrors()) {
            return ResponseEntity.badRequest().body(errors);
        }

        // eventDto 객체를 event 객체로 매핑 해주는 ModelMapper 아니면 빌더로 하기
        Event event = modelMapper.map(eventDto, Event.class);
        event.update();
        Event event1 = this.eventRepository.save(event);
        WebMvcLinkBuilder selfLinkBUilder = linkTo(EventController.class).slash(event1.getId());
        URI createdUri = selfLinkBUilder.toUri();
        event.setId(10l);
        EventResource eventResource = new EventResource(event);
        **eventResource.add(linkTo(EventController.class).withRel("query-events"));
        eventResource.add(selfLinkBUilder.withSelfRel());
        eventResource.add(selfLinkBUilder.withRel("update-event"));**
        return ResponseEntity.created(createdUri).body(eventResource);
    }

해당 방법으로 만들면 응답의 JSON 형식이 event로 감싸서 나온다 따라서 @JsonUnwrapped 모델을 사용하거나 RepresentationModel 대신 EntityModel을 사용한다

package me.jiho.demorestapi.event;

import com.fasterxml.jackson.annotation.JsonUnwrapped;
import org.springframework.hateoas.EntityModel;
import org.springframework.hateoas.Link;

public class EventResource extends EntityModel<Event> {
    public EventResource(Event content, Link... links) {
        super(content, links);
    }
}

EventResource 테스트

응답에 HATEOAS profile 관련 링크가 있는지 확인