인프런 커뮤니티 질문&답변
EventResource 객체를 생성하지 않고 EntityModel 객체를 받아와서 처리했습니다.
작성
·
541
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
질문자
혹은 아래와 같이 처리하기도 하였습니다.
@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






