ContentType 은 HTTP 요청 시 자원을 명시하기 위해 사용한다.
HTTP 의 간단한 구조는 아래와 같다.
Request Line |
HTTP Header |
Empty Line |
Message Body |
Post Method 를 이용해 ajax 요청 시 Message Body 부분에 데이터가 들어가고
해당 자원에 대해 명시하기 위해 HTTP Header 의 Content-Type 을 사용하는데
Content-Type에는 Body에 들어간 자원이 어떤 자원인지 표시해준다.
Content-Type 종류
TEXT
text/css, text/javascript, text/html, text/plain
FILE
multipart/form-data
Application
application/json, application/x-www-urlencoded
주로 사용하는 Application 형식만 정리해보겠습니다.
application/json
application/json 형태는 데이터 형식을 json 형태로 날리기 위해 사용된다.
Content-Type 을 application/json 형태로 날리게 되면
{key1 : value1, key2 : value2} 형식으로 날라간다.
주로 Java 의 Model 로 받을 때 편리하다.(개인적인 생각)
// javascript
let json = new Object();
json.name = 'obo';
json.number = '01011112222';
// 형식 - { name : 'obo', number : '01011112222' }
$.ajax({
type: 'POST'
url: '/main',
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify(json),
success: function(result){
console.log(result);
}
})
// model
public class TestModel {
String name;
String number;
...getter
...setter
...toString
}
// java Controller
@RequestMapping(value="/main")
@ResponseBody
public String main(@RequestBody TestModel model){
system.out.println("model : "+model.toString());
// 결과
// TestModel { "name" : "obo", "number" : "01011112222" }
return "";
}
JSON.stringify(json)
JSON.stringify 함수는 object 형태의 데이터를 문자형 json으로 변경해준다.
application/x-www-form-urlencoded
html 의 form 태그의 기본 Content-Type 이며,
주로 Jquery 의 serialize() 함수를 이용해 직렬화 시켜 사용한다.
데이터는 key1=value1&key2=value2.. 형태로 사용한다.
// javascript
let json = "name=obo&number=01011112222";
$.ajax({
type: 'POST'
url: '/main',
dataType: 'json',
contentType: 'application/x-www-form-urlencoded',
data: json,
success: function(result){
console.log(result);
}
})
// java Controller
@RequestMapping(value="/main")
@ResponseBody
public String main(@RequestParam("name") String name,
@RequestParam("number") String number)
{
system.out.println("name: "+name);
system.out.println("number: "+number);
// 결과
// name: obo
// number: 01011112222
return "";
}
참고 : https://jw910911.tistory.com/117