前言

本文主要记录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数组类型的数据

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

SpringMVC参数传递之基本数据类型和复杂对象说明的更多相关文章

  1. JavaScript数据类型相关知识详解

    这篇文章主要介绍了JavaScript数据类型相关知识详解,文中有非常详细的代码示例,对正在学习js数据类型的小伙伴们有很好的帮助,需要的朋友可以参考下

  2. JSP中springmvc配置validator的注意事项

    这篇文章主要介绍了JSP中springmvc配置validator的注意事项的相关资料,并说明springmvc中spring-servlet.xml、applicationContext.xml的区别需要的朋友可以参考下

  3. SpringMVC拦截器和异常处理器使用示例超详细讲解

    拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。本文将详细讲讲SpringMVC中拦截器参数及拦截器链配置,感兴趣的可以尝试一下

  4. SpringMVC数据页响应ModelAndView实现页面跳转

    本文主要介绍了SpringMVC数据页响应ModelAndView实现页面跳转,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. SpringMVC静态资源配置过程详解

    在javaweb项目中配置了DispatcherServlet的情况下,如果不进行额外配置的话,几乎所有的请求都会走这个servlet来处理,默认静态资源按路径是访问不到的会报404错误,下面就来讲一讲如何配置才能访问到静态资源吧

  6. 详解Python数据类型、进制转换、字符串格式化的问题

    这篇文章主要介绍了Python数据类型、进制转换、字符串格式化,Python2中区分整型int、长整型long,Python3中只有统称为整型int,本文给大家介绍的非常详细,需要的朋友参考下吧

  7. 详解SpringMVC中的四种跳转方式、视图解析器问题

    这篇文章主要介绍了SpringMVC的四种跳转方式、视图解析器,springmvc核心配置文件和视图解析器的使用,添加视图解析器,通过案例讲解四种跳转方式,需要的朋友可以参考下

  8. 详解SpringMVC的两种实现方式

    这篇文章主要介绍了SpringMVC的两种实现方式,方式一是通过实现Controller接口,方式二是使用注解开发,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下

  9. SpringMVC程序简单实例

    这篇文章主要介绍了SpringMVC程序简单实例的相关资料,需要的朋友可以参考下

  10. SpringMVC常用注解载入与处理方式详解

    这篇文章主要介绍了SpringMVC常用注解载入的方式和处理的方式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部