SpringMVC请求参数的处理

一、默认方式获取请求参数

直接给方法入参写一个和请求参数名相同的变量,这个变量就可以接收请求的参数值

<a href="request1?username=张三">获取请求参数</a>
    @RequestMapping(value = "/request1")
    public String request1(String username){
        System.out.println(username);
        return "success";
    }

二、@RequestParam获取请求参数的值

@RequestParam可以获取请求的指定参数的值,默认参数必须存在。

它有三个属性:

  • value:指定要获取的参数的key
  • required:指定这个参数是否是必须的
  • defaultValue:默认值
    @RequestMapping(value = "/request1")
    public String request1(@RequestParam(value = "user", required = false, defaultValue = "null") String username){  //就相当于username=request.getParameter("user")
        System.out.println(username);
        return "success";
    }

要注意@PathVariable是获取路径中参数的值(/user/{id}),@RequestParam是获取请求的参数的值(?username=XXX)。

三、@RequestHeader获取请求头中的值

@RequestHeader("User-Agent")可以获取浏览器的信息,相当于userAgent=request.getHeader("User-Agent")

它也有三个值:

  • value:参数的值
  • required:是否必须
  • defaultValue:默认值
    @RequestMapping(value = "/request1")
    public String request1(@RequestHeader("User-Agent") String UserAgent,@RequestParam(value = "user", required = false, defaultValue = "null") String username){  //就相当于username=request.getParameter("user")
        System.out.println(username);
        System.out.println(UserAgent);
        return "success";
    }

四、@CookieValue获取请求中某个Cookie的值

它也有三个值:

  • value:参数的值
  • required:是否必须
  • defaultValue:默认值
    @RequestMapping(value = "/request1")
    public String request1(
            @RequestHeader("User-Agent") String UserAgent,
            @RequestParam(value = "user", required = false, defaultValue = "null") String username, //就相当于username=request.getParameter("user")
            @CookieValue("JSESSIONID") String JID){
        System.out.println(username);
        System.out.println(UserAgent);
        System.out.println(JID);
        return "success";
    }

五、SpringMVC自动封装POJO

创建一个表单用来提交book信息

  <form action="addBook" method="post">
    <input type="text" name="bookName"/><br/>
    <input type="text" name="author"/><br/>
    <input type="text" name="price"/><br/>
    <input type="text" name="stock"/><br/>
    <input type="text" name="sales"/><br/>
  </form>

SpringMVC自动封装book对象

    @RequestMapping(value = "/addBook")
    public String addBook(Book book){
        System.out.println("保存图书:" + book);

        return "success";
    }

关于中文乱码问题可以配置一个字符编码Filter

    <!--配置字符编码的Filter-->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <!--encoding指定解决POST请求乱码-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <!--forceEncoding解决响应乱码-->
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

CharacterEncodingFilter类源码

通过request.setCharacterEncoding(encoding)设置字符编码方式

    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        String encoding = this.getEncoding();
        if (encoding != null) {
            if (this.isForceRequestEncoding() || request.getCharacterEncoding() == null) {
                request.setCharacterEncoding(encoding);
            }

            if (this.isForceResponseEncoding()) {
                response.setCharacterEncoding(encoding);
            }
        }

        filterChain.doFilter(request, response);
    }

要注意的是字符编码Filter一定要在其它Filter之前配置,因为一定要在第一次获取请求参数之前配置字符编码才会有效

输出结果:
在这里插入图片描述

六、请求参数传入原生API

SpringMVC也可以直接在参数上写原生API,比如HttpServletRequestHttpSession

只可以接受这几个原生API

1)HttpServletRequest
2)HttpServletResponse
3)HttpSession
4)java.security.Principal
5)Locale
6)InputStream
7)OutputStream
8)Reader
9)Writer
    @RequestMapping("/API")
    public String requestAPI(HttpSession session, HttpServletRequest request, HttpServletResponse response){
        request.setAttribute("reqParam","请求域中的参数");
        session.setAttribute("sessionParam","session域中的参数");
        ServletInputStream inputStream = request.getInputStream();
        ServletOutputStream outputStream = response.getOutputStream();
        BufferedReader reader = request.getReader();
        PrintWriter writer = response.getWriter();

        return "success";
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值