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数组类型的数据

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

相关文章

  • RabbitMQ 如何解决消息幂等性的问题

    RabbitMQ 如何解决消息幂等性的问题

    这篇文章主要介绍了RabbitMQ 如何解决消息幂等性的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Spring MVC参数校验详解(关于`@RequestBody`返回`400`)

    Spring MVC参数校验详解(关于`@RequestBody`返回`400`)

    这篇文章主要介绍了Spring MVC参数校验的相关资料,主要是针对`@RequestBody`返回`400`的问题,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • Java中4种校验注解详解(值校验、范围校验、长度校验、格式校验)

    Java中4种校验注解详解(值校验、范围校验、长度校验、格式校验)

    这篇文章主要给大家介绍了关于Java中4种校验注解详解的相关资料,分别包括值校验、范围校验、长度校验、格式校验等,Java注解(Annotation)是一种元数据,它可以被添加到Java代码中,并可以提供额外的信息和指令,需要的朋友可以参考下
    2023-08-08
  • 简单了解java volatile

    简单了解java volatile

    这篇文章主要介绍了了解java volatile,volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。下面我们来一起学习一下吧
    2019-05-05
  • 用Java实现聊天程序

    用Java实现聊天程序

    这篇文章主要为大家详细介绍了用Java实现聊天程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • Spring AOP面向切面编程实现原理方法详解

    Spring AOP面向切面编程实现原理方法详解

    这篇文章主要介绍了Spring AOP面向切面编程实现原理方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Maven环境安装配置和新建项目介绍

    Maven环境安装配置和新建项目介绍

    这篇文章介绍了Maven环境安装配置和新建项目介绍,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • 记录一个使用Spring Data JPA设置默认值的问题

    记录一个使用Spring Data JPA设置默认值的问题

    这篇文章主要介绍了使用Spring Data JPA设置默认值的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java详解Swing中的几种常用按钮的使用

    Java详解Swing中的几种常用按钮的使用

    这篇文章主要介绍了怎么用Java来创建和使用Swing中的几种常用按钮,按钮是我们经常要用的工具,但是你有想过自己怎么去实现它吗,感兴趣的朋友跟随文章往下看看吧
    2022-04-04
  • 带你了解Java数据结构和算法之队列

    带你了解Java数据结构和算法之队列

    这篇文章主要为大家介绍了Java数据结构和算法之队列,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01

最新评论