Spring不同类型参数传参

当POJO中使用简单类型属性时, 参数名称与POJO类属性名保持一致

POJO类

public class User {
    private String name;
    private Integer age;
    
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public Integer getAge() {
        return age;
    }
​
    public void setAge(Integer age) {
        this.age = age;
    }
​
}

Controller

@RequestMapping("/requestParam1")
public String requestParam1(String name ,String age){
    System.out.println("name="+name+",age="+age);
    return "page.jsp";
}

@RequestParam 的使用

 类型: 形参注解

 位置:处理器类中的方法形参前方

 作用:绑定请求参数与对应处理方法形参间的关系

访问http://localhost/requestParam2?userName=Jock

总结一下就是使得url中的请求参数与形参保持一致

当POJO中使用简单类型属性时, 参数名称与POJO类属性名保持一致

POJO类

public class User {
    private String name;
    private Integer age;
    
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public Integer getAge() {
        return age;
    }
​
    public void setAge(Integer age) {
        this.age = age;
    }
​
}

Controller

@RequestMapping("/requestParam3")
public String requestParam3(User user){
    System.out.println("name="+user.getName());
    return "page.jsp";
}

最终访问http://localhost/requestParam3?name=itheima&age=14

方法传递POJO类型参数,URL地址中的参数作为POJO的属性直接传入对象

参数冲突
当POJO类型属性与其他形参出现同名问题时,将被同时赋值
建议使用@RequestParam注解进行区分

Controller

//当方法参数中具有POJO类型参数与普通类型参数嘶,URL地址传入的参数不仅给POJO对象属性赋值,也给方法的普通类型参数赋值

@RequestMapping("/requestParam4")
public String requestParam4(User user,int age){
    System.out.println("user="+user+",age="+age);
    return "page.jsp";
}

最终访问//http://localhost/requestParam4?name=Jock&age=39

3
当POJO中出现对象属性时,参数名称与对象层次结构名称保持一致

POJO

public class User {
    private String name;
    private Integer age;

    private Address address;

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

}

Controller

使用对象属性名.属性名的对象层次结构可以为POJO中的POJO类型参数属性赋值


@RequestMapping("/requestParam5")
public String requestParam5(User user){
    System.out.println(user.getAddress().getCity());
    return "page.jsp";
}

访问 //http://localhost/requestParam5?address.city=beijing

一层套一层

4 当POJO中出现List,保存对象数据,参数名称与对象层次结构名称保持一致,使用数组格式描述集合中对象的位置

POJO

public class User {
    private String name;
    private Integer age;
    private List<address> addresses;
}

public class Address {
    private String province;
    private String city;
    private String address;
}</address>

Controller

**POJO中List对象保存POJO的对象属性赋值,使用[数字]的格式指定为集合中第几个对象的属性赋值

**


@RequestMapping("/requestParam6")
public String requestParam6(User user){
    System.out.println(user);
    return "page.jsp";
}

访问 //http://localhost/requestParam7?addresses[0].city=beijing&addresses[1].province=hebei

5 当POJO中出现Map,保存对象数据,参数名称与对象层次结构名称保持一致,使用映射格式描述集合中对象的位置****

POJO

&#xA0;public class User {
&#xA0; &#xA0; private String name;
&#xA0; &#xA0; private Integer age;
&#xA0; &#xA0; private Map<string,address> addressMap;
}
public class Address {
&#xA0; &#xA0; private String province;
&#xA0; &#xA0; private String city;
&#xA0; &#xA0; private String address;
}</string,address>

Controller

POJO中Map对象保存POJO的对象属性赋值,使用[key]的格式指定为Map中的对象属性赋值

@RequestMapping("/requestParam8")
public String requestParam8(User user){
    System.out.println(user.getAddressMap());
    return "page.jsp";
}

http://localhost/requestParam8?addressMap[‘job’].city=beijing&addressMap[‘home’].province=henan

数组类型参数

请求参数名与处理器方法形参名保持一致,且请求参数数量> 1个

访问URL: http://localhost/requestParam9?nick=Jockme&nick=zahc


@RequestMapping("/requestParam9")
public String requestParam9(String[] nick){
&#xA0; &#xA0; System.out.println(nick[0]+","+nick[1]);
&#xA0; &#xA0; return "page.jsp";
}

集合类型参数
保存简单类型数据,请求参数名与处理器方法形参名保持一致,且请求参数数量> 1个
访问URL: http://localhost/requestParam10?nick=Jockme&nick=zahc

@RequestMapping("/requestParam10")
public String requestParam10(@RequestParam("nick") List<string> nick){
&#xA0; &#xA0; System.out.println(nick);
&#xA0; &#xA0; return "page.jsp";
}</string>

注意: SpringMVC默认将List作为对象处理,赋值前先创建对象,然后将nick作为对象的属性进行处理。由于
List是接口,无法创建对象,报无法找到构造方法异常;修复类型为可创建对象的ArrayList类型后,对象可
以创建,但没有nick属性,因此数据为空。此时需要告知SpringMVC的处理器nick是一组数据,而不是一个单
一数据。通过@RequestParam注解,将数量大于1个names参数打包成参数数组后, SpringMVC才能识别该数
据格式,并判定形参类型是否为数组或集合,并按数组或集合对象的形式操作数据。

Original: https://www.cnblogs.com/spring-ioc/p/16482856.html
Author: 你问人生何
Title: Spring不同类型参数传参

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574237/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Maven把本地jar 加入jar库

    mvn install:install-file -DgroupId=net.neoremind -DartifactId=fountain-common -Dversion=v1…

    Java 2023年6月13日
    064
  • 十一、枚举 Enumeration(完结)

    十一、枚举 Enumeration 11.1 枚举的引入 需求:用类表示季节 传统方法:声明 Season 类,有 name,temperature 两个属性,构造器,get,se…

    Java 2023年6月5日
    058
  • elasticsearch通用工具类

    这几天写了一个关于es的工具类,主要封装了业务中常用es的常用方法。 本文中使用到的elasticsearch版本6.7,但实际上也支持es7.x以上版本,因为主要是对spring…

    Java 2023年6月5日
    055
  • 设计模式之建造者模式–工厂模式、生成器模式、单例模式、原型模式

    一 、学习原型模式,从模式动机、模式定义与分析、模式实例及代码要点、模式优缺点及应用场景四个方面分析该模式。 1模式动机: √复制一个对象,从而克隆出多个与原型对象一模一样的对象—…

    Java 2023年6月7日
    066
  • 向量判断划动方向

    向量判断划动方向 1. 背景 在当下手机游戏开发过程中.面对的不在是物理按键,一切操作都在一个可触摸的手机屏幕上.从用户按下屏幕开始,到移动手指,到结束.这段操作我们称其为滑动操作…

    Java 2023年6月13日
    080
  • Mybatis配置解析(核心配置文件)

    4、配置解析 4.1、核心配置文件 Mybatis的配置文件包含了会深深影响mybatis行为的设置和属性信息 mybatis-config.xml properties(属性)重…

    Java 2023年6月13日
    0110
  • windows 中如何定位恶意软件的藏身位置

    一: 下载spy++ 打开后 点击 搜索下面的查找窗口(Alt+F3) 点击 查找程序工具 右侧的 靶子一样的图标,鼠标左键按住不放,拖放到 弹窗上面,弹窗周围会出现 黑框。 然后…

    Java 2023年6月16日
    079
  • 20.多线程-基本代码

    示例一: 示例二: 主线程加入while循环,一直执行不退出。子线程会执行完毕,不会发生:子线程未执行完,主线程退出了,子线程被迫结束。 示例三: 子线程执行完了之后,主线程才会执…

    Java 2023年5月29日
    065
  • Spring Cache扩展:注解失效时间+主动刷新缓存(二)

    目的 之前在github上找了一个开源的项目,改了改缓存的扩展,让其支持在缓存注解上控制缓存失效时间以及多长时间主动在后台刷新缓存以防止缓存失效( Spring Cache扩展:注…

    Java 2023年5月30日
    075
  • Javaweb08-Ajax项目-分页条件查询 + 增删改

    1、登录 欢迎登录课工场KH96动漫管理系统 用户名: 用户密码: 欢迎登录课工场KH96动漫管理系统 用户名: 用户密码: $(function(){ //使用jQuery的Aj…

    Java 2023年6月15日
    047
  • flex布局–可滑动-换行

    display: flex; flex-wrap: wrap; // 让弹性盒元素在必要的时候拆行: overflow: auto; // 规定当内容溢出元素框时发生的事情。aut…

    Java 2023年5月29日
    046
  • Docker-Java限制cpu和内存及浅析源码解决docker磁盘挂载失效问题

    之前工作流的运行都是用的docker-java提供的api拉起的docker容器直接跑服务,但是最新线上的新业务资源消耗较大,单个容器如果不加控制,CPU和内存都会拉满,导致服务器…

    Java 2023年6月7日
    066
  • 重写与重载的区别

    ① 定义不同:重载是定义相同的方法名,参数不同;重写是子类重写父类的方法。 ② 范围不同:重载是在一个类中,是水平关系;重写是子类与父类之间,是垂直关系。 ③ 多态不同:重载是编译…

    Java 2023年6月8日
    051
  • 用typora+PicGo+GITee实现自动上传图片

    typora+PicGo+Gitees自动上传图片 1.打开下载好的 PicGo 点击左侧最下方 –> 插件设置。在右边输入框 输入:gitee,选择右边的插件,…

    Java 2023年6月7日
    0103
  • 基于TCP/IP协议,定义原始的字节流协议传输Student类

    在分布式系统中,不同节点之间需要进行通信来实现一致性,例如:在投票选举阶段,候选者需要为所有其他节点发送拉票请求,拉票请求中包含着自己的网络地址和任期号,也就是说,我们需要发送一个…

    Java 2023年6月5日
    0116
  • Java 图片裁剪,截取

    <span class="hljs-tag"><<span class="hljs-name">depende…

    Java 2023年6月7日
    069
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球