栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC-处理器接收请求参数详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC-处理器接收请求参数详解

SpringMVC-处理器方法的参数详解

文章目录
  • SpringMVC-处理器方法的参数详解
    • 一、直接使用方法的参数逐个接收
    • 二、使用对象接收多个参数
    • 三、请求参数和方法名称的参数不一致
    • 四、使用HttpServletRequest获取参数对象
    • 五、直接使用URL地址传参
    • 六、获取日期类型的参数
    • 七、获取数组类型的参数
    • 八、获取集合类型的参数
      • 1、List集合
      • 2、对象类型的集合

首先,准备好SpringMVC的运行环境,环境搭建参考如下链接:
SpringMVC-环境搭建.

一、直接使用方法的参数逐个接收
package com.dapan.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("param")
public class PramController {

    //直接使用方法的参数逐个接收:方法的参数名称必须与用户请求携带的参数名称(前端的name属性)保持一致,否则就会获取不到
    //好处:不需要类型的转换,前端只要传的是数字,可以直接用Integer来接收
    @RequestMapping("test01.do")
    public ModelAndView test01(Integer stuId,String stuName,Integer gender,Integer stuAge) {
        System.out.println("test01--------");
        System.out.println(stuId);
        System.out.println(stuName);
        System.out.println(gender);
        System.out.println(stuAge);
        return new ModelAndView("ok");
    }
}

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    index


点击登录
----1、直接使用方法的参数逐个接收
学生ID:
学生姓名:
学生性别:
学生年龄:

ok.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    ok


OK---------------


测试结果

二、使用对象接收多个参数

新增Student对象,对象中的属性与前端的name保持一致

public class Student {
    private Integer stuId;
    private String stuName;
    private Integer gender; //0表示男生 1表示女生
    private Integer stuAge;
    //...省略get/set方法和toString()方法
}

Controller类中新增test02方法

//直接使对象接收多个参数:要求用户请求携带的参数名称(前端的name属性)必须与实体类中的属性保持一致,否则就会获取不到
@RequestMapping("test02.do")
    public ModelAndView test02(Student student) {
        System.out.println("test02--------");
        System.out.println(student);
        return new ModelAndView("ok");
    }

index.jsp页面新增

----2、直接使用对象接收多个参数
学生ID:
学生姓名:
学生性别:
学生年龄:

测试结果

三、请求参数和方法名称的参数不一致

Controller类中新增test03方法

	//请求参数和方法名称的参数不一致
	//需要用@RequestParam注解来进行校正,
	//如果@RequestParam("")中的参数和请求参数的名称不一致则会抛出400错误
	//使用@RequestParam(value="id",required=false) 则不会报错,即使请求参数名称没有和他匹配的,只是将他的值置为空
    @RequestMapping("test03.do")
    public ModelAndView test03(@RequestParam("stuId") Integer id,
                               @RequestParam("stuName") String name,
                               @RequestParam("gender") Integer sex,
                               @RequestParam("stuAge") Integer age) {
        System.out.println("test03--------");
        System.out.println(id);
        System.out.println(name);
        System.out.println(sex);
        System.out.println(age);
        return new ModelAndView("ok");
    }

index.jsp页面新增

----3、请求参数和方法名称的参数不一致
学生ID:
学生姓名:
学生性别:
学生年龄:

测试结果:

四、使用HttpServletRequest获取参数对象

在controller中新增test04方法

 @RequestMapping("test04.do")
    public ModelAndView test04(HttpServletRequest request ) {
        System.out.println("test04--------");
        String stuId = request.getParameter("stuId");
        String stuName = request.getParameter("stuName");
        String gender = request.getParameter("gender");
        String stuAge = request.getParameter("stuAge");
        System.out.println(stuId==null?"":Integer.parseInt(stuId));
        System.out.println(stuName);
        System.out.println(gender==null?"":Integer.parseInt(gender));
        System.out.println(stuAge==null?"":Integer.parseInt(stuAge));
        return new ModelAndView("ok");
    }

index.jsp中新增

----4、使用HttpServletRequest获取参数对象
学生ID:
学生姓名:
学生性别:
学生年龄:

测试结果:

五、直接使用URL地址传参

在Controller中新增test05方法

 	//5、直接使用URL地址传参 例如:http://localhost:8080/param/test05.do/1005/qianerer/0/18
	//PathVariable("")中的参数必须与RequestMapping中{}的参数值保持一致
    @RequestMapping("test05.do/{id}/{name}/{sex}/{age}")
    public ModelAndView test05(@PathVariable("id") Integer stuId,
                               @PathVariable("name") String stuName,
                               @PathVariable("sex") Integer gender,
                               @PathVariable("age") Integer stuAge) {
        System.out.println("test01--------");
        System.out.println(stuId);
        System.out.println(stuName);
        System.out.println(gender);
        System.out.println(stuAge);
        return new ModelAndView("ok");
    }

修改web.xml配置文件,将拦截请求由*.do改为 /

测试结果:

六、获取日期类型的参数

修改Student实体类,添加Date类型的日期

public class Student {
    private Integer stuId;
    private String stuName;
    private Integer gender; //0表示男生 1表示女生
    private Integer stuAge;
    //必须在实体类中的Date类型的属性上添加@DateTimeFormat注解才能将前端传递的字符串转为date类型
    //不添加会报错
    @DateTimeFormat(pattern = "yyyy-MM-dd") 
    private Date registerTime;  //新增java.util.Date类型的注册时间
    //省略get/set方法 和toString()方法
}

在Controller类中新增test06方法

   @RequestMapping("test06.do")
    public ModelAndView test06(Student student) {
        System.out.println("test06--------");
        System.out.println(student);
        return new ModelAndView("ok");
    }

在index.jsp页面新增

----6、获取日期类型的参数
学生ID:
学生姓名:
学生性别:
学生年龄:
注册日期:

测试结果:

七、获取数组类型的参数

在controller类中添加test07方法

    //获取数组类型的参数
    @RequestMapping("test07.do")
    public ModelAndView test07(String[] stuName,HttpServletRequest request) {
        System.out.println("test07--------");
        //方式一:
        for (String s : stuName) {
            System.out.println(s);
        }
        System.out.println("---------------");
        //方式二:
        String[] stuNames = request.getParameterValues("stuName");
        for (String name : stuNames) {
            System.out.println(name);
        }
        return new ModelAndView("ok");
    }

在index.jsp页面新增

----7、获取数组类型的参数
学生姓名1:
学生姓名2:
学生姓名3:
学生姓名4:

测试结果:

八、获取集合类型的参数 1、List集合

在controller中新增

  	//获取数组类型的参数
	//集合类型如果是String/Integer等简单类型的集合,可以直接在前面加@RequestParam注解,注解中的值必须和上传的参数名称保持一致,不加注解则会报错
    @RequestMapping("test08.do")
    public ModelAndView test08(@RequestParam("stuName") List list) { 
        System.out.println("test08--------");
        for (String name : list) {
            System.out.println(name);
        }
        return new ModelAndView("ok");
    }

在index.jsp中新增

----8、获取集合类型的参数
学生姓名1:
学生姓名2:
学生姓名3:
学生姓名4:

测试结果:

2、对象类型的集合

如果是对象类型的集合,则不支持直接获取,必须封装在一个类中,作为一个属性操作

建vo类

需要将对象进行封装

新建vo类

package com.dapan.vo;

import com.dapan.entity.Student;

import java.util.List;

public class QueryVo {
    private List studentList;	//将集合进行封装,提供get/set方法

    public List getStudentList() {
        return studentList;
    }

    public void setStudentList(List studentList) {
        this.studentList = studentList;
    }
}

在controller中新增

//获取对象类型的集合参数
@RequestMapping("test09.do")
public ModelAndView test09(QueryVo vo) {
    System.out.println("test09--------");
    for (Student s : vo.getStudentList()) {
        System.out.println(s);
    }
    return new ModelAndView("ok");
}

在Index.jsp中新增

----9、获取集合类型的参数
学生姓名1:
学生姓名2:
学生姓名3:
学生姓名4:

测试结果:

以上就是我所学习的Controller接收请求参数的全部方法,欢迎各位大佬批评指针。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462249.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号