SpringMvc常用知识点详解

一、常用注解介绍

【1】@RequestMapping

可以放置在方法和类上。放在方法上,表示将当前方法注册为Controller类,当访问指定路径时,执行此方法。放在类上,则配置的路径会作为这个类中所有处理器的路径的父路径使用。

常用属性

value 指定要将当前处理器绑定到哪个访问路径上;可以配置多个路径;路径中也可以使用*号作为通配符匹配部分路径
method 指定当前处理器处理哪种提交方式提交的请求。method= RequestMethod.POST
params

用来限定当前请求中必须包含指定名称的请求参数才会被当前处理器处理。

通过params属性指定只处理请求参数符合指定要求的请求

1、只指定名称,要求必须具有该名称的请求参数
2、以"名称=值"或"名称!=值"的方式指定必须具有某个请求参数,且值必须等于或不等于给定值
3、以"!名称"的方式指定必须不包含指定名称的请求参数

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中书写以下代码,也可以作为全局异常处理的方法

<bean id="" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
           <property name="exceptionMappings">
               <props>
                   <prop key="java.lang.NullPointerException">null_err</prop>
                   <prop key="java.lang.Throwable">err</prop>
               </props>
           </property> 
    </bean>

 

 

 

 

 

 

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