SpringMVC 学习-@RequestMapping,SpringMVC获取参数

SpringMVC 学习—框架简介,搭建框架入门案例_Love Life .的博客-CSDN博客一.SpringMVC简介1.什么是MVCMVC是一种软件架构的思想,将软件按照模型,视图,控制器来划分M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为俩类: ·一类称为实体类Bean:专门用来存储业务数据,如Stuent,User等。 ·一类称为业务处理Bean:指Service或Dao对象,专门用于处理业务逻辑和数据访问。V:View,视图层,指功能中的html...https://blog.csdn.net/m0_52901132/article/details/124129642?spm=1001.2014.3001.5501接上叙

三,@RequestMapping注解

        1.@RequestMapping注解的功能

从注解名称我们可以看到,@RequestMapping注解的作用就是将请求处理请求的控制器方法关联起立,建立映射关系

SpringMVC接收到指定的请求就回来找到在映射关系中对应的控制器方法来处理这个请求 

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第1张图片

        2.@RequestMapping注解标识的位置

@RequestMapping标识一个类:设置映射的请求路径的初始信息

@Requestmapping标识一个方法:设置映射的请求路径的具体信息

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第2张图片

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第3张图片

         当模块比较多时如(现在有俩个模块:order订单模块,user用户模块,这时俩个模块中都有一个@RequestMapping("list")对应的控制器方法,当浏览器发送请求这时会报错404,因为控制器中有俩个list,它不知道要用那个list,所以这时需要order这个类定义一个@RequestMapping(Xxx)注解在user类上页添加一个@RequestMapping注解,在发送请求时就可以明确地写出到底访问那个请求如/user/list)

        3.@RequestMapping注解的value属性

                        @RequestMapping注解的value属性通过请求的请求地址匹配请求映射

                        @RequestMapping注解的value属性是一个字符串数组,表示该请求映射能够匹配多个请求地址所对应的请求。

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第4张图片

   

                  @RequestMapping注解的value属性必须设置,至少通过请求地址匹配请求映射

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第5张图片

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第6张图片

        4.注解的method属性

        @RequestMapping注解的method属性通过请求方式(get,post,put,delete)匹配请求映射。

        @RequestMapping注解的method是一个RequestMethod类型的数组,表示该请求映射能够匹配多种请求方式的请求。

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第7张图片

 若当前请求的请求地址满足请求映射的value属性,但是请求方式不满足method属性,则浏览器会报错405:Request method "POST" not supported

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第8张图片

测试RequestMapping注解的method属性---->GET
测试RequestMapping注解的method属性---->GET

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第9张图片

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第10张图片

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第11张图片


        5.@RequestMapping注解的params属性(了解)SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第12张图片

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第13张图片

 没有携带参数

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第14张图片

 携带参数

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第15张图片


        6.@RequestMapping注解的headers属性(了解)SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第16张图片

 跟value属性,性质差不多


        7.SpringMVC支持ant风格的路径

?:表示可以是任意字符

*:表示可以是0个或多个字符

**:表示任意的一层或多层目录

注意:在使用**,只能使用/**/xxx的方式

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第17张图片


        8.SpringMVC支持路径中的占位符(重点)

原始方式:/deleteUser?id=1

rest方式:/deleteUser/1

SpringMVC路径中的占位符常用于restful风格中,但请求路径中将某些数据通过路径的方式传输到服务器中,就可以在相应的@RequestMapping注解的value属性中通过占位符{xxx}表示传输的数据,再通过@PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第18张图片


四,SpringMVC获取请求参数

        1.通过ServletAPI获取

测试通过ServletAPI获取参数
@Controller
public class TestParamController {
    @RequestMapping("/testParam")
    public String testParam(ServletRequest request) {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("用户名:" + username + ",密码:" + password);  // 用户名:admin,密码:123
        return "success";
    }
}

        2.通过控制器方法的形参获取请求参数

用户名:
密码:
爱好:跑步:游泳:健身:
@RequestMapping("/testparamter")
    public String testParamter(String username,String password,String[] hobby) {
        System.out.println("用户名:" + username + ",密码:" + password+ ",爱好:" + Arrays.toString(hobby));
        /*
        结果:
                用户名:admin,密码:123,爱好:[run, Swimming, Bodybuilding]
        若请求参数中出现了多个同名的请求参数,可以在控制器方法的形参位置设置字符串类型或字符串数组接收此请求参数
        若使用字符串类型的形参,最终结果为请求参数的每一个值之间使用逗号进行拼接
         */
        return "success";
    }

        3.@RequestParam

        @RequestParam是将请求参数和控制器方法的形参创建映射关系

                @RequestParam注解一共有三个属性:

                        value:指定为形参赋值的请求参数的参数名

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第19张图片

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第20张图片

                         required:设置是否必须传输此请求参数,默认值为true

                                若设置为true时,则当前请求必须传输value所指定的请求参数,若没有传输该请求参数,且没有设置defaultValue属性,则页面报错400,Required String Parameter 'xxx'is not present,

                                若设置为false,则当前请求不是必须传输value所指定的请求参数,若没有传输,则注解所标识的形参的值为null

                        defaultValue:不管required属性值为true还是false,当value所指定的请求参数没有传输时,则使用默认值为形参赋值(常用)

4.@RequestHeader

        @RequestHeader是将请求头信息和控制器方法的形参创建映射关系

        @RequestHeader注解一共有三个属性:value,required,defaultValue,用法同@RequestParam

5.@CookieValue

        @CookieValue是将cookie数据和控制器方法的形参创建映射关系

        @CookieValue注解一共有三个属性:value,required,defaultValue,用法同@RequestParam

6.通过POJO获取请求参数

        可以在控制方法的形参位置设置一个实体类型的形参,此时若浏览器传输的请求参数的参数名和实体类中的属性名一致,那么请求参数就会为此属性赋值

SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第21张图片

用户名:
密码:
年龄:


    @RequestMapping("/testPOJo")
    public String testPOJO(User user){
        System.out.println(user);   // User{username='admin', password='123', age=21}
        return "success";
    }

7.解决获取请求参数的乱码问题

当我们使用get请求获取请求参数时如果出现了乱码问题可以在tomcat的目录找到server.xml 在配置端口的标签里添加URIEncoding="UTF-8" 

当我们使用post 请求获取请求参数时如果出现了乱码问题那么可以在web.xml配置过滤器

可以使用SpringMVC提供的编码过滤器CharacterEncodingFiflter,但是必须在web.xml中进行注册

        web.xml


    
        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
        
            forceResponseEncoding
            true
        
    
    
        CharacterEncodingFilter
        /*
    

这样我们再获取post请求参数就不会有乱码问题了

在这里我们分析一下这个 CharacterEncodingFilter 过滤器的源码SpringMVC 学习-@RequestMapping,SpringMVC获取参数_第22张图片

你可能感兴趣的:(java,spring,后端,开发语言,idea)