一、@Controller与@RestController:用于标记在一个类上,表示是处理器类。
1、@Controller:使用它标记的类就是一个SpringMVC Controller 对象。
2、@responsebody:标记于方法上,表示该方法的返回结果直接写入HTTP response body中
一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上 @responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response *body中。
比如异步获取json数据,加上@responsebody后,会直接返回json数据。
3、@RestController = @Controller+@ResponseBody,表示该类下的接口只返回数据不返回页面;
二、@RequestMapping:
1、介绍:RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。可以接收post请求也可以接收get请求。返回值会通过视图解析器解析为实际的物理视图,对于 InternalResourceViewResolver 视图解析器,会做如下的解析:
通过 prefix + returnVal + suffix 这样的方式得到实际的物理视图,然后做转发操作;
2、参数:
(1)value:指定请求的实际地址
(2)method:指定请求的method类型, GET、POST、PUT、DELETE等,衍生:@GetMapping、@PostMapping、@PutMapping
3、用法demo:
@RequestMapping(value={"", "/"}):可以为空或者/
//可以通过 http://ip:port/test或者http://ip:port/test1来访问。
@RequestMapping(value={"test", "test1"}),
三、@RequestParam与@RequestBody:controller接口接收参数注解。一个请求方法体最多只能有一个RequestBody,可以有多个RequestParam。
1、RequestParam:为缺省注解,RequestParam注解主要有下列参数:
(1) value:参数名字,即入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入;()Boolean包装类型类型:默认Boolean.FALSE,其他引用类型默认为null。
(2)required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;
(3)defaultValue:默认值,表示如果请求中没有同名参数时的默认值,默认值可以是SpEL表达式,如“#{systemProperties['java.vm.version']}”。
接收参数实例:访问时,参数追加在url后,可以接收get请求,也可以接收post请求:
(1)接收基本型、包装类型:http://localhost:9999/demo/test/paramTest?a=5&b=aaa
@RequestMapping("/paramTest")
public ResponseMessage param(int a,String b){
System.out.println("param"+a+" "+b);
return ResponseMessage.success();
}
(2)接收数组: http://localhost:9999/demo/test/paramTest?userIds=a,b,c,d
@RequestMapping("/paramTest")
public ResponseMessage param(String[] userIds){
System.out.println(userIds[0]);
return ResponseMessage.success();
}
注意:数组参数用逗号隔开,如果写成http://localhost:9999/demo/test/paramTest?userIds=[a,b,c,d],控制台打印的是:[a
(3)接收集合: @RequestParam不可以接收集合。
(4)接收对象: 注意对象里面不可以含有集合字段,因为 @RequestParam不可以接收集合 http://localhost:9999/demo/test/paramTest?userName=张三
@RequestMapping("/paramTest")
public ResponseMessage param(UserDTO user){
System.out.println("param"+user.getUserName());
return ResponseMessage.success();
}
2、RequestBody:该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。必须是post请求,且参数放在body请求体中,接收的是JSON字符串。与RequestParam接收参数不同的是RequestBody可以接收集合(当然也支持对象里面含有集合字段。)
3、@RequestBody与@RequestParam混合使用:
@RequestMapping("/multiTest")
public ResponseMessage body(@RequestBody UserDTO userDTO,String a){
System.out.println(userDTO.getUserName()+","+a);
return ResponseMessage.success();
}
四、@PathVariable:
1、介绍:用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。
2、demo:
@RequestMapping(value="/product/{productId}",method = RequestMethod.GET)
public String getProduct(@PathVariable("productId") String productId){
System.out.println("Product Id : " + productId);
return "hello";
}
/**
* 获取第三方登录的地址
*
* @param type
* 类型
* @return 引导用户登录授权地址
*/
@RequestMapping("/to/{type}")
@ResponseBody
public String getThirdLoginUrl(@PathVariable("type") String type, HttpSession session) {
String url = webIndexPage;
try {
switch (type) {
case OpenType.QQ:
case OpenType.WECHAT:
case OpenType.WEIBO:
// 这里可以直接验证 sessionud是否相同即可
String state = session.getId();
url = ThirdAccountUtil.getGrantAuthorizationUrl(type, state);
break;
default:
throw new ELPBizException("未知的第三方账号登录类型");
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return url;
}
五、@CookieValue:
1、介绍:用来获取Cookie中的值;
2、参数: value:参数名称 required:是否必须 defaultValue:默认值
3、demo:
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
System.out.println("JSESSIONID = " + sessionId);
return "success";
}