• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

EventController의 update에서 eventDto -> event로 mapping하는 방법 질문

20.05.04 15:41 작성 조회수 168

0

안녕하세요.

ModelMapper 관련 문의 드립니다.

(강의 본론을 좀 벗어난것 같긴한데 답변해 주실 줄 믿습니다. 감사합니다. 꾸벅)

EventController의 update method에서 사용자로 부터 전달받은 eventDto에 값이 일부만 들어있는 경우 (예, name만 update하고 싶은 경우에 body로  아래와 같이 보내려고 합니다) 일일이 노가다하지 않고 처리할 수 있는 방법이 있을까요.

-- 아래 --

{

  "name" : "Updated Event"

}

--------

이 경우 나머지 컬럼은 null이어서 validation에 걸립니다.

원하는 것은 나머지 컬럼은 기존값을 그대로 갖는 거예요.


@PutMapping("/{id}")
public ResponseEntity update(@PathVariable Integer id,
@Valid @RequestBody EventDto.CreateOrUpdate eventDto,
BindingResult errors,
@CurrentUser User currentUser) {
if (errors.hasErrors()) {
return badRequestResponse(errors);
}

Optional<Event> byId = this.eventRepository.findById(id);
if (!byId.isPresent()) {
return notFoundResponse();
}

Event event = byId.get();
if (currentUser != null && !currentUser.equals(event.getManager())) {
return new ResponseEntity(HttpStatus.FORBIDDEN);
}

modelMapper.map(eventDto, event);
event.update();

eventValidator.validate(event, errors);
if (errors.hasErrors()) {
return badRequestResponse(errors);
}
eventRepository.save(event);

EventModel eventModel = new EventModel(event);
eventModel.add(linkToDelete(event));
eventModel.add(linkToProfile("resources-events-update"));
return ResponseEntity.ok().body(eventModel);
}

답변 1

답변을 작성해보세요.

0

문서 맨 아래 코드를 참고하세요. (근데 저라면 저렇게까지 안하고 그냥 DTO를 바꾸거나 직접 값을 옮겨주는 코드를 작성하겠습니다.)

http://modelmapper.org/user-manual/property-mapping/