Backend/Spring

Error : HttpMediaTypeNotSupportedException

Mev01 2021. 10. 4. 21:28

Client

// http-common.js
import axios from 'axios'

export default axios.create({
  baseURL: 'http://127.0.0.1:8080/',
  headers: {
    'Content-type': 'application/json',
  },
})
import http from '@/util/http-common'

const initProfile = (data, callback, errorCallback) => {
  http
    .put('/member/' + data.uid, data.formData, {
      Headers: {
        'Content-Type': 'multipart/form-data',
      },
    })
    .then(res => callback(res))
    .catch(err => errorCallback(err))
}

 

Server

@PutMapping("/{id}")
public ResponseEntity<Map<String, Object>> updateUser
	(@PathVariable String id, @RequestBody MemberDto memberDto) throws IOException {

}

 

 

Client에서 multipart/form-data 형식으로 보낸 request를 Spring Server에서 받는 중 오류가 발생하였다.

2021-09-28 14:41:47.757 WARN 14900 --- [nio-8080-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundarywBOHpW3qcFIWfKBO;charset=UTF-8' not supported]

 

 

해결


stackoverflow를 찾아보니 @RequestBody는 Json 형태의 HTTP Body 내용을 Java Object로 변환해주는 역할을 한다.

Request는 multipart/form-data 형식으로 보냈는데 Json 형식으로 받으려고 하니 발생한 문제였다.

 

@RequestBody 대신에 @ModelAttribute를 쓰는 것을 권장하고 있다.

 

 

같이 보면 좋을 글


https://mangkyu.tistory.com/72

 

[Spring] @RequestBody, @ModelAttribute, @RequestParam의 차이

이번에는 Spring에서 Client로 받은 요청을 객체로 바인딩하기 위해 사용하는 방법들에 대해서 알아보도록 하겠습니다. 1. RequestBody, ModelAttribute, RequestParam이란? [ @RequestParam ] @RequestParam은..

mangkyu.tistory.com

 

 

'Backend > Spring' 카테고리의 다른 글

spring boot 시간 설정  (0) 2021.11.11
Build Error : no main manifest attribute, in *.jar  (0) 2021.11.10
API KEY 값 저장하기  (0) 2021.10.01
Spring Data JPA 사용법  (0) 2021.07.18
Spring Data JPA 기본  (0) 2021.07.18