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请求头包括了若干个属性。server可据此获知client的信息,通过@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"}


PS:能掌握上面几个注解,springmvc就能几乎相同能够用了。


原文地址:https://www.cnblogs.com/yangykaifa/p/6944219.html