HREF
REL
현재 리소스와의 관계를 표시
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);
}
}
응답에 HATEOAS profile 관련 링크가 있는지 확인