TIL)23.08.28(ModelAttribute)

주민·2023년 8월 28일
0

TIL

목록 보기
73/84

문제

전일 작업한 S3 업로드 api에서 파일과 같이 입력할 텍스트를 json 형식으로 받았는데 파일은 Param 형식으로 보내야 하다보니 requestDto의 값을 하나씩 따로 받아 Param에 입력을 해줘야 한다.
post는 컬럼이 2개 이지만 trade는 5개라 코드가 아래와 같은 양식은 지저분 할 거 같았다.

public ResponseEntity<ApiResponse> createPost(
@AuthenticationPrincipal UserDetailsImpl userDetails,
@RequestParam(value = "file", required = false) List<MultipartFile> files,
@RequestParam(value = "title") String title,
@RequestParam(value = "content") String content) throws IOException {
       postService.createPost(userDetails.getUser(),files,title,content);
		return ResponseEntity.status(HttpStatus.CREATED).body(new ApiResponse("post 생성 성공!", HttpStatus.CREATED.value()));}

시도 & 해결

튜터님과 팀원 분의 도움을 받아 ModelAttribute으로 해결하였다.
ModelAttribute 애너테이션을 통해 requestDto로 받고 포스트맨 테스트 할 때는 컬럼을 따로 입력(기존과 동일)하면 파일과 requestDto로 받아 post를 만들 수 있다.

public ResponseEntity<ApiResponse> createPost(@AuthenticationPrincipal UserDetailsImpl userDetails,
@RequestParam(value = "file", required = false) List<MultipartFile> files,
@ModelAttribute PostRequestDto postRequestDto) throws IOException {
        postService.createPost(userDetails.getUser(),files, postRequestDto);
        return ResponseEntity.status(HttpStatus.CREATED).body(new ApiResponse("post 생성 성공!", HttpStatus.CREATED.value()));}

알게된 점

ModelAttribute
클라이언트로부터 일반 HTTP 요청 파라미터나 multipart/form-data 형태의 파라미터를 받아 객체로 사용하고 싶을 때 이용된다.

아래 클래스를 객체로 받아와 @ModelAttribute PostRequestDto postRequestDto 형식으로 사용

public class PostRequestDto {
  private String title;
  private String content;
 }

0개의 댓글

관련 채용 정보