SpringMVC的前后端参数传递主要分为三大类
  • 基本数据类型(包括String类)
  • 对象数据类型(一般都是自定义的类)
  • 数组和List集合
  • 复杂的数据类型
根据格式又分为
  • json数据格式
  • 非json数据格式
一、演示基本数据类型(String)

下面是请求的路径

@RequestMapping(path= "demo")  // demo    ip+端口 +项目根路径 +  / + demo
   @ResponseBody // 返回类型是一个对象:可以是字符串、对象、List等等;不是一个页面
   public String demo(Model model
                      // 走默认装配规则,参数名称和名字一致,选传
       , String name
                      // 参数名称和名字默认一直,必传参数,不传报错
           , @RequestParam String name0
                      // 通过value属性定义名称,必传参数,不传报错
           , @RequestParam(value = "name1") String name1
                      // 通过name属性定义,非必传参数
           , @RequestParam(name = "name2",required = false) String name2
                      // 通过value属性定义,必传参数,有默认值,可以不传自动赋值
           , @RequestParam(value = "name3",defaultValue = "t3") String name3
                      // 自定义参数名字,不必加name或者value属性,必传
           , @RequestParam("name444") String name4
   ){
       System.out.println("name:"+name);
       System.out.println("name0:"+name0);
       System.out.println("name1:"+name1);
       System.out.println("name2:"+name2);
       System.out.println("name3:"+name3);
       System.out.println("name4:"+name4);
       return "hello";
   }
测试一:不传递参数值

spring getmapping怎么传对象 springmvc传对象参数_System


@RequestParam注解的required属性默认是true,也就是说,name0,name1和name44必须传值

测试二:(传递name0,name1和name444)

spring getmapping怎么传对象 springmvc传对象参数_springmvc_02


后台打印:

spring getmapping怎么传对象 springmvc传对象参数_java_03


因为name属性没有加@RequestParam注解,采用SpringMVC的默认匹配规则,如果不传值默认为空

二、演示注解@PathVariable
@RequestMapping(value={
	            "demo1/{name1}/{name2}/{name3}"
	            // 配合name3选传,此种场景应用较少,一般使用此注解均为必传参数
	            ,"demo1/{name1}/{name2}"
	    })
    @ResponseBody
    public String demo1(Model model
                        //注意,没加注解,使用问号后追加参数请求
            , String name
                        // 必传
            , @PathVariable String name1
                        // 必传
            , @PathVariable("name2") String name2
                        // 选传
            , @PathVariable(value = "name3",required = false) String name3
    ){
        System.out.println("name:"+name);
        System.out.println("name1:"+name1);
        System.out.println("name2:"+name2);
        System.out.println("name3:"+name3);
        return "hello";
    }

@PathVariable注解主要是在路径后面传递参数,默认也是必传

测试一:(传入name,name1,和name2属性)

spring getmapping怎么传对象 springmvc传对象参数_springmvc_04


因为name属性用的是@RequestParam注解,所有不是在路径里面传,而是在参数里面加

而且匹配的是demo1/{name1}/{name2}路径,因为没有传入name3属性的值

测试二:(传入name,name1,name2和name3)

spring getmapping怎么传对象 springmvc传对象参数_springmvc_05


这个时候匹配的路径就是demo1/{name1}/{name2}/{name3}

二、演示对象数据类型

定义Demo类

public class Demo {

    private String name;
    private String number;
    private List<DemoC> demoCList;
}
@ResponseBody  //返回是一个对象 不是渲染页面
    @RequestMapping("demo2")
    public Demo demo2(Demo demo){
        System.out.println("demo:"+demo);
        return demo;
    }

1. 采用form表单形式(非json格式)

spring getmapping怎么传对象 springmvc传对象参数_springmvc_06


SpringMVC会自动把name属性值和number属性值封装到Demo类当中

2. 采用json格式传递

/**
     * @RequestBody  要求前台通过json格式传递参数  header:   content-type : application/josn
     * @param demo
     * @return
     */
    @ResponseBody
    @PostMapping("demo22") // 只允许使用post方式
    @GetMapping
//    @RequestMapping(
//            method = {RequestMethod.POST},value = "demo22"
//    )
    public Demo demo22(@RequestBody Demo demo){
        System.out.println("demo:"+demo);
        return demo;
    }

测试结果

spring getmapping怎么传对象 springmvc传对象参数_springmvc_07


加了@ResponseBody注解说明前台只能传递json格式的数据

三、数组和List集合

1. 非json格式

@ResponseBody
    @RequestMapping("demo3")
    public Long[] demo3(Long[] ids){
        System.out.println("ids:"+ids.length);
        return ids;
    }

不加@RequestParam注解采用SpringMVC的自动匹配规则

测试结果:

spring getmapping怎么传对象 springmvc传对象参数_spring_08


也可以采用:

spring getmapping怎么传对象 springmvc传对象参数_java_09


两种方式SpringMVC都能解析

2. json格式

@ResponseBody
    @RequestMapping("demo33")
    public Long[] demo33(@RequestBody Long[] ids){
        System.out.println("ids:"+ids.length);
        return ids;
    }

spring getmapping怎么传对象 springmvc传对象参数_System_10

List集合测试

1. 非json格式

@ResponseBody
    @RequestMapping("demo4")
    public List<Long> demo4(@RequestParam List<Long> idList){
        // 0不能作为被除数
//        int c= 1/ 0;
        System.out.println("ids:"+idList);
        return idList;
    }

List集合进行传参的时候不能采用SpringMVC的自动匹配规则
必须加上@RequestParam注解,但是测试方法和数组差不多

spring getmapping怎么传对象 springmvc传对象参数_System_11


2. json格式

@ResponseBody
    @RequestMapping("demo5")
    public List<Long> demo5(@RequestBody List<Long> idList){
        System.out.println("ids:"+idList);
        return idList;
    }

spring getmapping怎么传对象 springmvc传对象参数_spring_12

四、对象加List接收
public class Demo {

    private String name;
    private String number;
    private List<DemoC> demoCList;
}
public class DemoC {

    private String nickname;
    private String number;
}
@ResponseBody
    @RequestMapping("demo6")
    public Demo demo6(Demo demo){
        System.out.println("demo:"+demo);
        return demo;
    }

采用form表单的提交方式

<form action="/demo2" method="POST">

    name:<input type="text" name="name"/><br/>
    number:<input type="text" name="number"/><br/>

    <!-- 以下部分可以动态添加 -->
    nickname:<input type="text" name="demoCList[0].nickname"/>
    number:<input type="text" name="demoCList[0].number"/><br/>

    nickname:<input type="text" name="demoCList[1].nickname"/>
    number:<input type="text" name="demoCList[1].number"/><br/>


    nickname:<input type="text" name="demoCList[2].nickname"/>
    number:<input type="text" name="demoCList[2].number"/><br/>

    nickname:<input type="text" name="demoCList[3].nickname"/>
    number:<input type="text" name="demoCList[3].number"/><br/>
    <button type="submit">提交</button>
</form>

spring getmapping怎么传对象 springmvc传对象参数_java_13


返回内容如下:

spring getmapping怎么传对象 springmvc传对象参数_spring_14


采用json格式

spring getmapping怎么传对象 springmvc传对象参数_java_15


spring getmapping怎么传对象 springmvc传对象参数_springmvc_16


这种格式在日常项目中还是很常见的,所有都要熟练掌握