SpringMVC参数传递之基本数据类型和复杂对象说明

 更新时间:2022年10月26日 11:27:34   作者:lxcoding  
这篇文章主要介绍了SpringMVC参数传递之基本数据类型和复杂对象说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

前言

本文主要记录SpringMVC如何接收前台传过来的基本数据类型和对象,以及可能出现的组合。

在了解下面参数如何传递前先记住两个结论

  • 当Ajax以application/x-www-form-urlencoded编码格式上传数据,必须使用JSON对象传递数据,后台需要使用@RequestParam 或者HttpServletRequest来接收数据
  • 当Ajax以application/json编码格式上传数据,必须使用JSON字符串传递数据,后台需要使用@RquestBody标识参数来获取数据,使用Map或者实体对象来接收数据,如果只单单是接收一个数组,可以使用List来接收数据。

下面可能会用到的一些类

public class User {
    private String name;
    private int age;
	//getter and setter...
}

1.当简单接收基本数据类型和包装类型的时候

当前台发送过来一些基本类型或包装类型的数据,可以直接使用基本类型或包装类型形参接收,或者把这些参数封装在对象中,使用对象来接收。

前台发送json对象(application/x-www-form-urlencoded)

$(function () {
    var obj={};
    obj.name="李四";
    obj.age=12;
    $.ajax({
        url: "/param/test1",
        type:"POST",
        contentType:"application/x-www-form-urlencoded",
        data:obj,
        dataType:"json",
        success:function(data){
        }
    })
})

后台使用基本类型或包装类型形参接收数据

形参名必须和前台发送过来的属性名统一,如果不相同(前台是age字段,后台使用userAge字段接收),可以使用@RequestParam声明是要接收哪个字段的值

@RequestMapping(value = "/test1", method = RequestMethod.POST)
@ResponseBody
private String Test1(String name,@RequestParam("age")int  userAge) {
   System.out.println(name);
   System.out.println(userAge);
   return "success";
}

当然这里也可以使用对象来接收,前提是对象的成员变量名必须和json对象的属性名一致。

@RequestMapping(value = "/test1", method = RequestMethod.POST)
@ResponseBody
private String Test1(User user) {
   System.out.println(user);
   return "success";
}

2.当接收复杂对象的时候

当从前台发过来的json对象中又包含对象的时候,我们可以考虑用Map集合接收,或者使用自定义类来封装。

前端发送json字符串(注意:这里使用application/json)

$(function () {
    var obj={};
    obj.name="展示";
    var user1={"name":"李四","age":1};
    var user2={"name":"网四","age":23};
    obj.users={};
    obj.users.user1=user1;
    obj.users.user2=user2;
    var s=JSON.stringify(obj);
    $.ajax({
        url: "/param/test1",
        type:"POST",
        contentType:"application/json",
        data:JSON.stringify(obj),//"{"name":"展示","users":{"user1":{"name":"李四","age":1},"user2":{"name":"网四","age":23}}}"
        dataType:"json",
        success:function(data){
        }
    })
})

使用自定义类来接收

public class StringAndMap {
    private String name;
    private Map<String,User> users;
    //getter and setter....
}
@RequestMapping(value = "/test1", method = RequestMethod.POST)
@ResponseBody
private String Test1(@RequestBody StringAndMap sam) {
    System.out.println(sam.getName());
    Map<String,User> userMap=sam.getUsers();
    System.out.println(userMap.get("user1"));
    System.out.println(userMap.get("user2"));
    return "success";
}

使用Map集合接收

@RequestMapping(value = "/test1", method = RequestMethod.POST)
@ResponseBody
private String Test1(@RequestBody Map<String,Object> map) {
    System.out.println(map.get("name"));
    Map<String,Object> userMap=(Map<String,Object>)map.get("users");
    System.out.println(userMap.get("user1"));
    System.out.println(userMap.get("user2"));
    return "success";
}

接收数据后的map形参

无论使用自定义类封装还是使用Map集合,json对象的属性名一定要和接收对象的属性一致。

那我们可不可以使用前台发送json对象(application/x-www-form-urlencoded),后台直接使用自定义类来接收呢?

是不可以的,你们自己可以试试。从以往的经验来看,只要前端发过来的json对象中包含对象或者数组,都只能使用前台发送json字符串,后台使用@RequestBody修饰的形参接收。

上面只是讲解了关于简单对象和复杂对象参数的传递,如果对象中涉及到数组呢?

可以看看我另一篇文章SpringMVC参数的传递——接收List数组类型的数据

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MyBatis快速入门(简明浅析易懂)

    MyBatis快速入门(简明浅析易懂)

    MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。mybatis的学习是程序员的必修课。今天小编通过分享本教程帮助大家快速入门mybatis,对mybatis入门知识感兴趣的朋友参考下吧
    2016-11-11
  • Maven打包并生成运行脚本的示例代码

    Maven打包并生成运行脚本的示例代码

    这篇文章主要介绍了Maven打包并生成运行脚本,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • SpringSecurity实现登陆认证并返回token方式

    SpringSecurity实现登陆认证并返回token方式

    这篇文章主要介绍了SpringSecurity实现登陆认证并返回token方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Spring @Cacheable指定失效时间实例

    Spring @Cacheable指定失效时间实例

    这篇文章主要介绍了Spring @Cacheable指定失效时间实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 详解Java字符串在内存中的存储位置

    详解Java字符串在内存中的存储位置

    这篇文章主要介绍了Java字符串在内存中的存储位置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Java实现二叉树的示例代码(递归&迭代)

    Java实现二叉树的示例代码(递归&迭代)

    二叉树(Binary tree)是树形结构的一个重要类型。本文将利用Java语言实现二叉树,文中的示例代码讲解详细,需要的同学可以参考一下
    2022-03-03
  • Java实现两人五子棋游戏(七) 屏幕提示信息

    Java实现两人五子棋游戏(七) 屏幕提示信息

    这篇文章主要为大家详细介绍了Java实现两人五子棋游戏,屏幕提示游戏信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • SpringSecurity实现前后端分离的示例详解

    SpringSecurity实现前后端分离的示例详解

    Spring Security默认提供账号密码认证方式,具体实现是在UsernamePasswordAuthenticationFilter 中,这篇文章主要介绍了SpringSecurity实现前后端分离的示例详解,需要的朋友可以参考下
    2023-03-03
  • Maven模版Bug及解决办法

    Maven模版Bug及解决办法

    默认,会帮我们创建src/main/resources 按照Maven的规范,Maven会有3个目录,分别是: src/main/java : java源文件存放位置 src/main/resource : resource资源,如配置文件等 src/test/java : 测试代码源文件存放位置
    2016-04-04
  • 带你玩转Kafka之初步使用

    带你玩转Kafka之初步使用

    最近开发的项目中,kafka用的比较多,为了方便梳理,所以记录一些关于kafka的文章,这篇文章主要给大家介绍了关于Kafka初步使用的相关资料,需要的朋友可以参考下
    2021-11-11

最新评论