您好,登錄后才能下訂單哦!
1. Content-Type
MediaType,即是Internet Media Type,互聯(lián)網(wǎng)媒體類型;也叫做MIME類型,在Http協(xié)議消息頭中,使用Content-Type來表示具體請(qǐng)求中的媒體類型信息。
常見的媒體格式類型如下:
text/html : HTML格式
text/plain :純文本格式
text/xml : XML格式
p_w_picpath/gif :gif圖片格式
p_w_picpath/jpeg :jpg圖片格式
p_w_picpath/png:png圖片格式
以application開頭的媒體格式類型:
application/xhtml+xml :XHTML格式
application/xml : XML數(shù)據(jù)格式
application/atom+xml :Atom XML聚合格式
application/json : JSON數(shù)據(jù)格式
application/pdf :pdf格式
application/msword : Word文檔格式
application/octet-stream : 二進(jìn)制流數(shù)據(jù)(如常見的文件下載)
application/x-www-form-urlencoded :
<form encType=””>中默認(rèn)的encType,form表單數(shù)據(jù)被編碼為key/value格式發(fā) 送到服務(wù)器(表單默認(rèn)的提交數(shù)據(jù)的格式)
另外一種常見的媒體格式是上傳文件之時(shí)使用的:
multipart/form-data : 需要在表單中進(jìn)行文件上傳時(shí),就需要使用該格式
以上就是我們?cè)谌粘5拈_發(fā)中,經(jīng)常會(huì)用到的若干content-type的內(nèi)容格式。
2. Spring MVC中關(guān)于關(guān)于Content-Type類型信息的使用
首先我們來看看RequestMapping中的Class定義
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
String[] value() default {};
RequestMethod[] method() default {};
String[] params() default {};
String[] headers() default {};
String[] consumes() default {};
String[] produces() default {};
}
各參數(shù)含義:
value: 指定請(qǐng)求的實(shí)際地址, 比如 /action/info之類。
method: 指定請(qǐng)求的method類型, GET、POST、PUT、DELETE等
consumes: 指定處理請(qǐng)求的提交內(nèi)容類型(Content-Type),例如application/json, text/html;
produces: 指定返回的內(nèi)容類型,僅當(dāng)request請(qǐng)求頭中的(Accept)類型中包含該指定類型才返回
params: 指定request中必須包含某些參數(shù)值是,才讓該方法處理
headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請(qǐng)求
其中,consumes, produces使用content-typ信息進(jìn)行過濾信息;headers中可以使用content-type進(jìn)行過濾和判斷。
3. 使用示例
3.1 headers
@RequestMapping(value = "/test", method = RequestMethod.GET, headers="Referer=http://www.ifeng.com/")
public void testHeaders(@PathVariable String ownerId, @PathVariable String petId) {
// implementation omitted
}
這里的Headers里面可以匹配所有Header里面可以出現(xiàn)的信息,不局限在Referer信息。
3.2 params的示例
@RequestMapping(value = "/test/{userId}", method = RequestMethod.GET, params="myParam=myValue")
public void findUser(@PathVariable String userId) {
// implementation omitted
}
僅處理請(qǐng)求中包含了名為“myParam”,值為“myValue”的請(qǐng)求,起到了一個(gè)過濾的作用。
3.3 consumes/produces
@Controller
@RequestMapping(value = "/users", method = RequestMethod.POST, consumes="application/json", produces="application/json")
@ResponseBody
public List<User> addUser(@RequestBody User userl) {
// implementation omitted
return List<User> users;
}
方法僅處理request Content-Type為“application/json”類型的請(qǐng)求. produces標(biāo)識(shí)==>處理request請(qǐng)求中Accept頭中包含了"application/json"的請(qǐng)求,同時(shí)暗示了返回的內(nèi)容類型為application/json;
4.應(yīng)用場(chǎng)景
GET、POST方式提交的請(qǐng)求:
Content-type: 1、application/x-www-form-urlencoded:@RequestBody不是必須加的
2、mutipart/form-data:@RequestBody不能處理這種格式
3、其他格式,比如application/json,application/xml等,必須使用@RequestBody來處理
@ResquestBody注解可以使http消息轉(zhuǎn)換器會(huì)根據(jù)content-type對(duì)請(qǐng)求體進(jìn)行解析
PUT方式提交的請(qǐng)求:
以上1和3的場(chǎng)景都是必須使用@RequestBody來處理的,2場(chǎng)景也是不支持的
實(shí)例:
如: $.ajax({
url:"/login",
type:"post",
contentType:"application/json;charset=UTF-8",
data:JSON.stringify({"name":"test","pass":"123456"})
});
后臺(tái)接收代碼示例:
@RequestMapping(value="/login")
@ResponseBody
public ModelAndView loadForm(@RequestBody Login login){
// implementation omitted
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。