【1】@RequestMapping
可以放置在方法和类上。放在方法上,表示将当前方法注册为Controller类,当访问指定路径时,执行此方法。放在类上,则配置的路径会作为这个类中所有处理器的路径的父路径使用。
常用属性
value | 指定要将当前处理器绑定到哪个访问路径上;可以配置多个路径;路径中也可以使用*号作为通配符匹配部分路径 |
method | 指定当前处理器处理哪种提交方式提交的请求。method= RequestMethod.POST |
params | 用来限定当前请求中必须包含指定名称的请求参数才会被当前处理器处理。 通过params属性指定只处理请求参数符合指定要求的请求 1、只指定名称,要求必须具有该名称的请求参数 |
headers | 用来限定当前请求中必须包含指定名称的请求头才会被当前处理器处理 格式和params一致 |
produces | 用来响应请求的媒体类型,可以设置响应编码类型和返回内容格式(JSON、text等等) |
【2】@RequestParam
用于绑定参数,可将传递过来的参数绑定到指定参数身上
示例:
@RequestParam(value="age",required=false,defaultValue="18")int age,
常用属性:
value | 传递的参数名称, |
required | 表示是否具有传递的参数,如果没有传递该参数,则会报错。默认为true,表示必须传递该参数,false,则表示该参数可传可不传 |
defaultValue | 默认值,表示当没有传递过来的参数,则将默认值绑定到指定参数上 |
【3】@PathVariable
表示占位符,可以动态的获取路径上的信息,支持Restful风格路径
示例:
@RequestMapping("/test05/{username}/{age}.action")
public void test05(@PathVariable("username") String name,
@PathVariable("age") int age) {
System.out.println(name+"~"+age);
}
【4】@SessionAttributes
在多个请求之间共用数据,将指定的对象,复制一份存入到session域中。放置在类上。
常用属性:
value | 想要存入参数的名称 |
types | 想要存入参数的类型 |
value与types之间属于并集关系,表示与value名称一致的对象存入到session域中,与types类型一致的对象也存放到session域中。
示例:
@SessionAttributes(value="country",types=String.class)
public class MyController3{
@RequestMapping("/{username}/test02.action")
public String test02(Model model){
model.addAttribute("country","上海");
return "test_3_02";
}
}
【5】@ExceptionHandler
标注在方法上,表示该方法为异常处理方法,当在该类中出现异常时,则会跳到该方法中。根据方法的逻辑,进行处理异常。
示例:
@ExceptionHandler
public String exceptionEvent(Exception e){
return "err";
}
出现异常后跳转到err.jsp界面
注意:标注的方法一定要接收Exception对象
【6】@ControllerAdvice
对全局的Controller进行增强,可以进行配置全局异常信息(与@ExceptionHandler),进行全局信息绑定(与@ModelAttribute),进行全局数据预处理(与@InitBinder)。
示例:配置全局异常信息处理
@ControllerAdvice
public class GlobalExceptionHandle {
@ExceptionHandler
public String exceptionEvent(Exception e){
return "err";
}
}
【7】@ResponseBody
表示该方法的放回值,如果是字符串,则将该字符串写入到界面上,如果是对象,则对象以json串的形式写入到客户端。
示例:
@ResponseBody
@RequestMapping(value="/test02.action",produces="text/html;charset=utf-8")
public String test02() throws Exception {
return "我爱你中国";
}
@ResponseBody
@RequestMapping(value="/test01.action",produces="application/json;charset=utf-8")
public Dog test01() throws Exception {
Dog dog = new Dog("aaa",18);
return dog;
}
produces只是为了防止中文乱码的出现,如果大家想处理全局请求与响应乱码,请参考:https://blog.csdn.net/c17315377559/article/details/101940087
【8】@ModelAttribute
使用在方法上 ,则被修饰的方法将会在当前类的任意handler方法执行之前执行,该方法返回的返回值会自动存入model供后续使用。
使用在方法参数之前,则会从model中获取属性值赋值到被修饰的方法参数上。
示例:
使用在方法上
@RequestMapping(value="/test05.action")
@ModelAttribute("name")
public String test05(){
return "bzh";
}
此时,name=“bzh”将注入到model中,默认是request域中
使用在属性上
@RequestMapping(value="/test04.action")
public void test04(@ModelAttribute("country") String country){
System.out.println("country:" + country);
}
此时,则会从model中获取属性country并值赋值到被修饰的方法参数上。
注意:如果该类被@SessionAttributes 修饰的话,则会存入到session域中,同样也是从session域中获取。
【9】@InitBinder
为当前控制器注册一个属性编辑器,绑定数据格式,只对当前的Controller有效。
示例:日期格式处理,浏览器中日期的格式是yyyy-MM-dd,而Springmvc的日期格式是yyyy/MM/dd,所以接收日期格式要转化一下
@InitBinder
public void InitDate(ServletRequestDataBinder binder) {
binder.registerCustomEditor(Date.class,
new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
}
【10】@CookieValue
可以将请求中的指定名称的cookie赋值给指定方法参数
示例:
@RequestMapping(value="/test03.action")
public void test03(@CookieValue("JSESSIONID") String id) {
System.out.println(id);
}
请求转发使用的关键字是forward
重定向使用的关键字是redirect
如果,不使用以上两个关键字,则Springmvc会根据视图解析器,转发到:前缀名+返回值+后缀名这个页面。
示例:
请求转发:
@RequestMapping("/test01.action")
public String test01(HttpServletResponse response) throws IOException{
return "forward:/my01/test01.action";
}
请求重定向:
@RequestMapping("/test02.action")
public String test02(HttpServletRequest request) throws IOException{
return "redirect:/index.jsp";
}
路径依据的是项目的根路径。
【1】当前类的错误界面处理可以根据@ExceptionHandle注解
【2】使用类控制全局错误界面处理可以使用@ControllerAdvice+@ExceptionHandle进行配置
【3】在SpringMvc.xml中书写以下代码,也可以作为全局异常处理的方法
null_err
err