springmvc之@Controller、@RequestMapping等註解講解

代碼事例:

@Controller
@RequestMapping("/user")
public class UsersController {
	@RequestMapping(value="/findAll")
	private String findAll(){
		return "index";
	}
}

下面對上面幾個註解進行簡單的說下用法:

@Controller

@Controller:表明這個類是一個控制器類。如果用這個註解,需要在spring-mvc配置文件加上這一段,<context:component-scan base-package=“com.ztz.springmvc.controller”/>

@RequestMapping

@RequestMapping:可以爲控制器指定處理可以請求哪些URL請求,@RequestMapping可以定義在類或方法上。

類上:提供初步的請求映射信息。相對於 WEB 應用的根目錄
方法上:提供進一步的細分映射信息。相對於類定義處的 URL。
若類定義處未標註 @RequestMapping,則方法處標記的 URL 相對於WEB 應用的根目錄
DispatcherServlet 截獲請求後,就通過控制器上
@RequestMapping 提供的映射信息確定請求所對應的處理方法。
@RequestMapping 除了可以使用請求 URL 映射請求外,還可以使用請求方法、請求參數及請求頭映射請求。

@RequestMapping 限定請求方法、 請求參數、 請求頭
@Controller
@RequestMapping("/user")
public class UsersController {
	
	@RequestMapping(value="/findAll",method=RequestMethod.GET)
	private String findAll(){
		System.out.println("只接受get請求");
		return "index";
	}
}
@Controller
@RequestMapping("/user")
public class UsersController {
	
	@RequestMapping(value="/findAll",method=RequestMethod.POST)
	private String findAll(){
		System.out.println("只接受post請求");
		return "index";
	}
}
@Controller
@RequestMapping("/user")
public class UsersController {
	
	@RequestMapping(value="/findAll",params="name")
	private String findAll(){
		System.out.println("只接受name參數");
		return "index";
	}
}

如果一個請求URL,沒有攜帶name參數,那麼該方法就拒絕唄訪問。

@Controller
@RequestMapping("/user")
public class UsersController {
	
	@RequestMapping(value="/findAll",headers="Content-Type:text/html;charset=UTF-8")
	private String findAll(){
		System.out.println("只接受請求頭中Content-Type爲text/html;charset=UTF-8的請求");
		return "index";
	}
}

@RequestParam 綁定請求參數
在處理方法入參處使用 @RequestParam 可以把請求參數傳遞給請求方法
value:參數名
required: 是否必須。 默認爲 true, 表示請求參數中必須包含對應的參數, 若不存在,將拋出異常

@Controller
@RequestMapping("/user")
public class UsersController {
	
	@RequestMapping(value="/findAll")
	private String findAll(@RequestParam(value="name",required=true)String name,//參數name不能爲空
						   @RequestParam(value="sex",required=false)String sex,//參數sex可以爲空
						   @RequestParam(value="age",defaultValue="20")String age){//參數age如果爲空,默認值爲20
		System.out.println(name);
		System.out.println(sex);
		System.out.println(age);
		return "index";
	}
}

瀏覽器請求:http://127.0.0.1:8080/springmvc/user/findAll?name=123
控制檯輸出:
123
null
20

@RequestHeader 獲取請求頭
一個Http請求頭包含了若干個屬性,服務器可據此獲知客戶端的信息,通過@RequestHeader即可將求頭中的屬性值綁定到處理方法的入參中。

@Controller
@RequestMapping("/user")
public class UsersController {
	
	@RequestMapping(value="/findAll")
	private String findAll(@RequestHeader(value="User-Agent")String user_Agent,
						   @RequestHeader(value="Cookie")String cookie){
		System.out.println(user_Agent);
		System.out.println(cookie);
		return "index";
	}
}

瀏覽器請求:http://127.0.0.1:8080/springmvc/user/findAll
控制檯輸出:
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36
JSESSIONID=0E665D80D25F097EB9ECA533F07C3355

@CookieValue 獲取cookie值

上面我們獲得http請求頭的cookie,現在我們直接去獲得cookie的值。

@Controller
@RequestMapping("/user")
public class UsersController {
	
	@RequestMapping(value="/findAll")
	private String findAll(@CookieValue(value="JSESSIONID")String cookie){
		System.out.println(cookie);
		return "index";
	}
}

瀏覽器請求:http://127.0.0.1:8080/springmvc/user/findAll
控制檯輸出:
0E665D80D25F097EB9ECA533F07C3355

@RequestBody獲取http的body
@Controller
@RequestMapping("/user")
public class UsersController {
	
	@RequestMapping(value="/findAll",method=RequestMethod.POST)
	private String findAll(@RequestBody(required=true) String body){
		System.out.println(body);
		return "index";
	}
}

這裏採用Fiddler測試下,POST請求http://127.0.0.1:8080/springmvc/user/findAll,消息體是:{“name”:“test @RequestBody”}
控制檯輸出:
{“name”:“test @RequestBody”}

作者:java小醬油啊
來源:CSDN
原文:https://blog.csdn.net/luckey_zh/article/details/46850155

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章