@PatchMapping("/{question-id}")
public ResponseEntity patchQuestion(@PathVariable("question-id") @Positive long questionId,
@Valid @RequestBody QuestionPatchDto questionPatchDto) {
questionPatchDto().setQuestionId(questionId);
Question question = questionService.updateQuestion(mapper.questionPatchDtoToQuestion(questionPatchDto()));
return new ResponseEntity<>(new SingleResponseDto<>(mapper.questionToQestionResponsDto(question)), HttpStatus.OK);
}
위 코드에서 question을 작성한 아이디와 수정하려는 아이디의 비교를 하기위해서 파라미터로 memberId를 받아 비교하고 싶었는데 HTTP프로토콜에서는 @RequestBody는 한개만 전송할 수 있다고 한다.
@RequestBody를 두개를 넣는 효과를 기대하기 위해서는 두개의 Dto를 합쳐주는 class를 하나 만들어서 그것을 받으면 된다.
@Getter
public class QuestionMemberIdDto {
@Positive
private long memberId;
}
memberId를 받기위한 Dto추가
@Getter
@Setter
public class QuestionPatchMemberIdRequest {
private QuestionPatchDto questionPatchDto;
private QuestionMemberIdDto questionMemberIdDto;
}
Dto를 합치는 class
@PatchMapping("/{question-id}")
public ResponseEntity patchQuestion(@PathVariable("question-id") @Positive long questionId,
@Valid @RequestBody QuestionPatchMemberIdRequest questionPatchMemberIdRequest) {
questionPatchMemberIdRequest.getQuestionPatchDto().setQuestionId(questionId);
Member member = memberService.findMember(questionPatchMemberIdRequest.getQuestionMemberIdDto().getMemberId());
Question question = questionService.updateQuestion(mapper.questionPatchDtoToQuestion(questionPatchMemberIdRequest.getQuestionPatchDto()), member);
return new ResponseEntity<>(new SingleResponseDto<>(mapper.questionToQestionResponsDto(question)), HttpStatus.OK);
}
Dto를 합치는 class를 Request로 받아 원하는 정보를 받을 수 있게 되었다.
POSTMAN을 통한 Request예시
{
"questionPatchDto": {
"questionBody": "본문 내용 수정"
},
"questionMemberIdDto": {
"memberId": 1
}
}
'복습 > 개발 일지' 카테고리의 다른 글
헤더에 Authorization 추가 (0) | 2023.04.23 |
---|---|
크롤링해서 얻은 csv파일을 DB에 입력하기 (0) | 2023.04.16 |
Path parameters with the following names were not found in the request (0) | 2023.04.07 |
Location Header만 반환하는 메서드에 body 얹기 (0) | 2023.04.07 |
"Unauthorized" (0) | 2023.03.22 |