인프런 커뮤니티 질문&답변

kmh님의 프로필 이미지
kmh

작성한 질문수

스프링 기반 REST API 개발

스프링 HATEOAS 적용

EventResource 객체를 생성하지 않고 EntityModel 객체를 받아와서 처리했습니다.

작성

·

483

14

소스를 공유합니다.

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

        eventValidator.validate(event, errors);

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

        Event newEvent = eventRepository.save(modelMapper.map(event, Event.class));
        Integer eventId = newEvent.getId();
        newEvent.update();

        WebMvcLinkBuilder selfLinkBuilder = linkTo(EventController.class).slash(eventId);
        URI createdUri = selfLinkBuilder.toUri();

        EntityModel eventResource = EntityModel.of(newEvent);
        eventResource.add(linkTo(EventController.class).slash(eventId).withSelfRel());
        eventResource.add(linkTo(EventController.class).withRel("query-events"));
        eventResource.add(selfLinkBuilder.withRel("update-event"));
        return ResponseEntity.created(createdUri).body(eventResource);
    }

답변 2

3

kmh님의 프로필 이미지
kmh
질문자

혹은 아래와 같이 처리하기도 하였습니다.

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

        eventValidator.validate(event, errors);

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

        Event newEvent = eventRepository.save(modelMapper.map(event, Event.class));
        Integer eventId = newEvent.getId();
        newEvent.update();

        WebMvcLinkBuilder selfLinkBuilder = linkTo(EventController.class).slash(eventId);
        URI createdUri = selfLinkBuilder.toUri();
        List<Link> links = Arrays.asList(
                selfLinkBuilder.slash(eventId).withSelfRel(),
                selfLinkBuilder.withRel("query-events"),
                selfLinkBuilder.withRel("update-event")
        );
        EntityModel eventResource = EntityModel.of(newEvent, links);
        eventResource.add();
        eventResource.add();
        eventResource.add(selfLinkBuilder.withRel("update-event"));
        return ResponseEntity.created(createdUri).body(eventResource);
    }

1

감사합니다. 저도 안되서 Spring hateoas docs를 보니깐 ResourceSupport, Resource 객체가 1.2.1 버전부터 각각 RepresentationModel, EntityModel로 변경되었더라구요.

다른 수강생분들도 본인 hateoas 버전 확인해보시고 1.2.1 이라면 kmh님이작성한 코드로 진행하시면 될 것 같습니다.

https://docs.spring.io/spring-hateoas/docs/1.2.0/reference/html/#migrate-to-1.0.changes

kmh님의 프로필 이미지
kmh

작성한 질문수

질문하기