RequestMapping
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
String name() default "";
@AliasFor("path")
String[] value() default {};
@AliasFor("value")
String[] path() default {};
RequestMethod[] method() default {};
String[] params() default {};
String[] headers() default {};
String[] consumes() default {};
String[] produces() default {};
}
- name表示這個注解的名稱,
- value和path可以共用;
- method表示支持的RequestMethod的種類包括get,post等
- params 表示指定request中必須包含某些參數(shù)值是,才讓該方法處理。
- headers指定request中必須包含某些指定的header值,才能讓該方法處理請求
- consumes表示指定處理請求的提交內(nèi)容類型(Content-Type),例如application/json, text/html;
- produces 表示返回內(nèi)容的類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回
當consumes或者produces不滿足時,返回http403,不支持的媒體類型
Autowired and Resource
- Autowired 是Spring提供的注解,默認按類型注入,找不到或者找到倆個相同類型bean則報錯,可以和@Qualifier一起搭配使用,表示找不到type則根據(jù)name查找
@Autowired
@Qualifier("userDao")
- Resource默認按名稱查找
-- 指定了name則按name查找,找不到拋異常
-- 指定了type按type查找,無需使用類似于@Resource(type=Car.class)的注釋方式,因為 Bean 的類型信息可以通過Java 反射從代碼中獲取。
-- 指定了name和type,則按按倆者尋找符合條件的唯一的bean,找不到報錯
-- 如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;如果沒有匹配,則回退為一個原始類型進行匹配,如果匹配則自動裝配
@PathVariable
將請求中的變量映射到方法參數(shù)上,同時還對變量支持正則表達式
@RequestMapping(value = "/sayhello/{type:[a-z-]+}", method = {RequestMethod.GET}, consumes = MediaType.APPLICATION_JSON_VALUE,produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public String say(@PathVariable String type, String word) {
return type + word;
}
@RequestParam
功能相當于request.getParameter("name"),有三個屬性,value指定映射的字段名稱,required=false表示該屬性不是必傳的,defaultValue可以指定該屬性的默認值。當url有倆個word時,會默認把倆個word的value合并成一個String.
當該注解使用在Map<String, String> or MultiValueMap<String, String>這些類型上時,就可以匹配所有的入?yún)?/p>
@RequestBody和@ResponseBody
- @RequestBody是把request body里面的數(shù)據(jù)綁定到參數(shù)上
- @ResponseBody是把返回類型寫到HTTP response body
倆者都使用系統(tǒng)默認的HttpMessageConverter進行解析,@RequestBody使用header部分的Content-Type的格式解析,如果沒有,則報錯,@ResponseBody根據(jù)Request對象的header部分的Accept屬性(逗號分隔),逐一按accept中的類型,去遍歷能處理的HttpMessageConverter,Accept屬性為空,則默認按所有的MediaType類型去匹配。
如果是application/x-www-form-urlencoded,則是否使用@RequestBody時為可選,也可以用@RequestParam,@ModelAttribute來處理.若是multipart/form-data,@RequestBody不能處理這種格式的數(shù)據(jù);而其他的格式,必須使用@RequestBody來處理,包括application/json,application/xml.
若是PUT方式提交的,也是根據(jù)Content-Type的值來判斷.application/x-www-form-urlencoded這回是必須用@RequestBody來處理,而multipart/form-data,則同樣還是不能處理;其他,也同樣還是必須用@RequestBody來處理.