보통 Controller에서 Dto를 받을 때는 @RequestBody를 주로 사용합니다.

그리고 File을 받을 때는 MultipartFile 객체를 사용하며, @RequestParam을 사용합니다.

 

하지만 File과 Dto를 같이 받기 위해서는 @RequestPart라는 어노테이션이 필요합니다.

File은 @RequestParam, Dto는 @RequestBody를 사용해서 받을려고 했지만 몇번을 시도해도 안되더라고요..

그래서 구글링을 통해 RequestPart라는 어노테이션을 찾아냈습니다.

 

우선 Controller입니다.

File과 Dto 모두 @RequestPart 어노테이션으로 받도록 합니다.

 

그리고 Dto인 UserInsertPostReq는 이렇게 구성되어 있습니다.

이전글 에서 사용했던 Dto와 동일합니다.

 

그리고 Controller에서 호출할 Service의 insertUser 메소드입니다.

파일을 저장할 경로를 지정한 후에 지정한 경로에 파일을 저장하고 DB에 유저 정보를 추가하는 로직입니다.

 

저는 이를 수행하기 위해 포스트맨을 사용하였습니다.

Key name은 @RequestPart 에서 value로 지정해준 name과 동일한 Key name으로 넣어줍니다.

이제 저기있는 Send를 눌러볼까요?

 

네 역시나 400에러가 발생합니다.

 

구글링을 통해 value에 json형식으로 넣는 방법을 알게되었고, 그대로 따라해보았습니다.

이런식으로 Key name은 userInsertPostReq, value는 json 방식으로 작성하였습니다.

다시 Send를 눌러보겠습니다.

 

이번에는 415 에러가 발생합니다..

 

한 두 시간 동안은 400, 415에러만 봤던것 같습니다.

 

이 에러들을 해결하기 위해 구글링을 해본 결과로는

여기서 Dto인 userInsertPostReq는 content type을 application/json으로 지정하면 해결할 수 있습니다.

userInsertPostReq의 content type을 application/json으로 지정한 후 Send를 누릅니다.

 

그럼 입력한 정보가 잘 들어가는 것을 확인할 수 있습니다.

 

File과 Dto를 같이 받아올 때 Key name과 content type 설정을 잘못하여 나온 에러 상황이었습니다.

이 방법 외에 다른 방법이 있는지는 잘 모르겠습니다. 더 많은 공부가 필요할 것 같습니다.

 

지금까지 단일 File과 Dto를 요청하는 것에 대해 알아보았고, 다수의 File과 Dto 요청에 관해서는 아래 링크에서 확인하시면 됩니다.

https://emoney96.tistory.com/375

 

Postman을 이용한 다수의 File, Dto 동시 Post 요청

https://emoney96.tistory.com/258 Postman을 이용한 MultipartFile, Dto 동시 Post요청 보통 Controller에서 Dto를 받을 때는 @RequestBody를 주로 사용합니다. 그리고 File을 받을 때는 MultipartFile 객체를 사..

emoney96.tistory.com

 

Controller에서 Query String을 받아오기 위해 @RequestParam을 사용하였습니다.

@RequestParam을 이용하여 Sort객체 정보를 담기 위해 type은 String[]으로 지정하였습니다.

그럼 대략 이런식으로 쓸 수 있습니다.

 

그리고 스웨거를 이용하여 테스트를 합니다.

 

위에서부터 순서대로 sort.length, sort[0], sort[1] 입니다.

 

그럼 여기서 정렬조건을 하나만 넣어볼까요?

정렬조건을 title,desc으로 보냅니다.

 

??????? 갑자기 "title,desc"로 받아온게 아니라 split(",")으로 나눈것처럼 "title", "desc"로 받아왔습니다.

스프링에서는 ","로 나열된 String을 배열로 인식하여 자동으로 나눠준다고합니다.

하지만 저는 지금 상황에서 원하지 않습니다.. "title,desc" 이렇게 그대로 들어오기를 원합니다.

 

 

https://stackoverflow.com/questions/23695817/requestparam-array-mapping-issues/55251064

 

@RequestParam array mapping issues

I'm doing a REST service with Spring MVC framework. I have a method: @RequestMapping("/rest/{tableName}", method = RequestMethod.GET) public @ResponseBody CustomObject query( @PathVariable("

stackoverflow.com

다행히도 친구가 찾아준 이 링크에서 저와 같은 상황에 놓인 사람이 있었나봅니다.

 

밑의 댓글에서 준 코드를 적용하고싶은 컨트롤러에 붙이니 해결되었습니다.

이렇게 이 initBinder 메소드를 작성하는 것만으로 해결이 되었습니다.

 

아 편안하네요

'Spring' 카테고리의 다른 글

Entity @Embeddable을 이용한 복합 키 구현  (0) 2021.08.01
Entity @IdClass를 이용한 복합 키 구현  (0) 2021.07.29
Spring JPA Pagenation  (0) 2021.07.24
Spring Optional.isPresent()  (0) 2021.07.15
Spring 기본 세팅 (STS)  (0) 2021.06.12

+ Recent posts