SpringMVC--获取请求参数

我们在servlet里面学过,前端数据可以通过请求时的request域获取,获取request对象需要写先要继承HttpServlet,然后重写doGet 或者doPost方法,通过request调用getParameter获取请求参数。下面介绍一些springMVC里面的一些获取请求参数的方法。

文章目录

  • 获取请求参数
    • 1、通过request对象获取
    • 2、通过控制器方法的形参获取
    • 3、@RequestParam注释获取
    • 4、@RequestHeader和@CookieValue获取
    • 5、通过实体类获取请求参数
    • 6、修改默认编码

获取请求参数

1、通过request对象获取

springMVC通过request获取请求参数只需要在传参列表里面加入一个HttpServletRequest对象的参数就可以使用request域里面的方法。

    @RequestMapping(value = "/testparam")
    public String toTestParam(HttpServletRequest request){
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("username="+username+",password="+password);
        return "testparams";
    }

2、通过控制器方法的形参获取

这种方法非常简单,你前端页面里面有什么求情,然后就在方法里面构造对应的形式参数就可以获取,需要注意的是请求参数名称必须要和前端请求参数名称一致,否者就获取不到。

    @RequestMapping(value = "/testparam")
    public String toTestParam(String username,String password){
        System.out.println("username="+username+",password="+password);
        return "testparams";
    }

如果将username换成name,但是前端请求参数并没有这个,那就获取不到任何信息。
在这里插入图片描述
若请求参数有多个值,servlet里面有getParameterValues可以获取,那请求参数是否需要设置多个呢?但是肯定不是,参数列表处理对这种多个请求参数有两种表示方法,第一种就是直接用一个对应类型的形参接受,接受后的结果会用“,”拼接起来,第二种就是设置数组,用来存放多个值。
第一种:逗号拼接

    @RequestMapping(value = "/testparam")
    public String toTestParam(String username,String password,String hobby){
        System.out.println("username="+username+",password="+password+",兴趣爱好:"+hobby);
        return "testparams";
    }

在这里插入图片描述
第二种:数组接收

    @RequestMapping(value = "/testparam")
    public String toTestParam(String username,String password,String[] hobby){
        System.out.println("username="+username+",password="+password+",兴趣爱好:"+ Arrays.asList(hobby));
        return "testparams";
    }

在这里插入图片描述

3、@RequestParam注释获取

@RequestParam注释是用在参数列表里面的,只需要在形参前面加上就可以了。@RequestParam里面有三个参数:value=(“param”) required defaultVaulue
第一个属性里面是请求参数名,要和前端name属性一致,第二个参数是设置是否要必须传入请求参数,默认的是TRUE,如果值为TRUE并且前端没有传入value属性里面同名的请求参数,程序就会报错。如果改为false,对应value属性可以没有传入请求参数。第三个参数是设置对应请求参数的默认值,若前端没有传入值就使用这个默认值。

    @RequestMapping(value = "/testparam1")
    public String toTestParam(@RequestParam(value = "username",required = false,defaultValue = "cx") String username,
                              @RequestParam(value = "password",required = false,defaultValue = "123456")String password){
        System.out.println("username="+username+",password="+password);
        return "testparams";
    }

如果没有设置默认值,required 属性是true,并且请求参数没有传输,会报400错误

    @RequestMapping(value = "/testparam1")
    public String toTestParam(@RequestParam(value = "user_name") String username,
                              @RequestParam(value = "password",required = false,defaultValue = "123456")String password){
        System.out.println("username="+username+",password="+password);
        return "testparams";
    }

SpringMVC--获取请求参数_第1张图片

4、@RequestHeader和@CookieValue获取

@RequestHeader和@CookieValue注解使用方法和@RequestParam一样,里面的参数以及使用方法都完全相同,都有value=(“param”) required defaultVaulue三个属性,这里就不介绍了。@RequestHeader是获取请求头信息的,@CookieValue是通过cookie键获取cookie值的。

    @RequestMapping(value = "/testheader1")
    public String toTestHader(@RequestHeader(value = "Host",required = true,defaultValue = "localhost:8080") String host,
                              @CookieValue(value = "JSESSIONID")String cookie){
        System.out.println("Host:"+host);
        System.out.println("Cookie:"+cookie);
        return "testparams";
    }

在这里插入图片描述

5、通过实体类获取请求参数

我们在前面用到了通过参数列表获取请求参数,与servlet原生的获取方式要简单得多。单这种方式有一个缺点,就是万一前端请求参数有十几个或者更多呢,那参数列表总不能写十几个吧。下面就介绍一种更简单获取请求参数的方法,把表单里面的全部字段封装成一个实体类,通过实体类获取请求参数。需要注意的是实体类定义的属性名必须要和表单name属性一样,否者无法获取。
下面定义一个实体类User,用user对象获取请求参数。

// user属性,注意要先生成set,get方法
    private int id;
    private String username;
    private String password;
    private String[] hobby;
    @RequestMapping(value = "/testparam2")
    public String toTestParam2(User user){
        System.out.println(user);
        return "testparams";
    }

获取结果:
在这里插入图片描述

6、修改默认编码

我们在请求或者响应时会有中文的内容,但是默认的编码不支持中文。在servlet里面我们通过 req.setCharacterEncoding(“utf-8”); resp.setCharacterEncoding(“utf-8”);方法改变请求和响应的编码,那在springMVC里面怎么修改呢。Javaweb三大组件:Servlet、Filter、Listener就是servlet程序,过滤器,监听器,这三大组件加载顺序是Listener——》Filter——》servlet,我们只需要在创建监听器的时候把编码改掉,那servlet里面的编码自然就都被改掉了。下面就是修改监听器编码的配置,将其加入到web.xm文件里面。

    <filter>
        <filter-name>CharacterEncodingFilterfilter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
        <init-param>
            <param-name>encodingparam-name>
            <param-value>UTF-8param-value>
        init-param>
        <init-param>
            <param-name>forceResponseEncodingparam-name>
            <param-value>trueparam-value>
        init-param>
        <init-param>
            <param-name>forceRequestEncodingparam-name>
            <param-value>trueparam-value>
        init-param>
    filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilterfilter-name>
        <url-pattern>/*url-pattern>
    filter-mapping>

你可能感兴趣的:(Spring,spring,mvc,java,架构)