DDunDDang
DD's Coding
DDunDDang
전체 방문자
오늘
어제
  • 분류 전체보기 (16)
    • 코드스테이츠_43기 (1)
    • 복습 (11)
      • Java (0)
      • 자료구조, 알고리즘 (1)
      • Spring (2)
      • MYSQL (1)
      • 개발 일지 (6)
      • 배포 (1)
    • 알고리즘 (3)
      • Baekjoon (2)
      • 추가 개념 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

hELLO · Designed By 정상우.
DDunDDang

DD's Coding

복습/개발 일지

하나의 메서드에 두 개의@RequestBody 넣기

2023. 3. 5. 00:42
@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
    '복습/개발 일지' 카테고리의 다른 글
    • 크롤링해서 얻은 csv파일을 DB에 입력하기
    • Path parameters with the following names were not found in the request
    • Location Header만 반환하는 메서드에 body 얹기
    • "Unauthorized"
    DDunDDang
    DDunDDang

    티스토리툴바