Jquery ajax를 통해 Spring Boot Controller로 데이터를 보낼때 415 에러, 400 에러가 났다.
- 결론 1. Controller 로 ajax를 통해 Json 데이터를 보낼땐 String 형태로 보내기 2. contentType 설정을 application/json으로 설정하기 3. Controller에서 받는 형태에 따라 다르다
@RequestBody 어노테이션을 사용하여 Model 형태의 객체로 받을경우 Content-Type 을 “application/json” 로 설정 해줘야한다. 또한 json 데이터는 JSON.stringify(json) 을 사용하여 Json String 형태로 변환하여 보낸다.
@RequestParam 어노테이션을 사용하여 데이터를 받을 경우 Content-Type을 "application/x-www-form-urlencoded" 로 설정한다. 기본 Content-Type 이기 때문에 Content-Type을 생략해도 된다. 위 Content-Type은 데이터가 Json 형태가 아닌 Query String 형태로 날라간다. 예시) name=obo&number=123&address=seoul
1. List Model 형식으로 데이터를 보냈으며 에러는 보낼때 Content-Type 설정을 안했다. (415 Error)
- 보낼 데이터 형식
위 List 형 Json 데이터를 Controller로 보냈다. 하지만 415 Error 와 함께 보내지지 않았다. data 는 제대로 json 형태의 String 문자열로 보냈다. 이유는 보내는 데이터의 Content-Type의 미설정으로 인해 서버가 어떠한 데이터인지 이해하지 못해 발생하는 에러다.
아래의 이미지는 ajax를 통해 데이터를 보낼때의 헤더이다. Content-Type 이 json 형태가 아니라서 서버가 이해하지 못했다.
아래와 같이 content-Type 을 설정해줘야 한다. * contentType: "application/json; charset=utf-8"
2. 또한 data 형식을 json 형태의 String 문자열로 보내지 않으면 400에러가 난다. (400 Error)
- 보낼 데이터 형식
위 List 형 Json 데이터를 Controller로 보냈다. 하지만 400 Error 와 함께 보내지지 않았다. 데이터 자체를 전송할 때 Json 형태의 String 문자열로 보내야 서버가 제대로 받을 수 있었다.
아래와 같이 data를 보낼때 Json 데이터를 String 문자열로 변환하여 보내야한다. * JSON.stringify(보낼 Json 형태의 data)