SpringMVC接收与响应json数据的几种方式

前言

前后端的数据交互,除了通过form表单进行提交外,也可以通过ajax向后端传递和接收json格式数据(这种方式可以实现请求数据和页面分离)。本文将总结一下在Spring MVC中接收和响应json数据的几种方式。

话不多说了,来一起看看详细的介绍吧

准备步骤:

1.导入json相关框架的依赖(比如jackson)。

2.spring mvc的controller方法正常写,如果需要响应json,增加@responsebody注解。

3.在接受json对应的输入参数前,加上@RequestBody注解。

服务端接收json数据还原为java对象,称为反序列化,反之,将java对象作为响应转换为json数据发回给客户端,称为序列化。

注意:因为要使用ajax,所有一定要引入jQuery,切记!

jackson maven依赖:

  <!-- jackson依赖 -->
  <dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-core</artifactId>
   <version>2.7.0</version>
  </dependency>
  <dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.7.0</version>
  </dependency>
  <dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-annotations</artifactId>
   <version>2.7.0</version>
  </dependency>

一、以实体类接收

背景:当ajax传递的参数较多时,采用参数名匹配的方法不太方便。如果后台有对应的实体类,这时可以选择在客户端将数据封装为json格式传递给后台,后台用对应的实体类进行接收。

客户端:

<button onclick="clickMe()">点我</button>
<script>
 function clickMe() {
  $.ajax({
   type : 'POST',
   url : "acceptJsonByEntity",
   contentType : "application/json;charset=utf-8",
   // 如果想以json格式把数据提交到后台的话,JSON.stringify()必须有,否则只会当做表单提交
   data : JSON.stringify({
    "bookId" : 1,
    "author" : "Jack"
   }),
   // 期待返回的数据类型
   dataType : "json",
   success : function(data) {
    var bookId = data.bookId;
    var author = data.author;
    alert("success:" + bookId+','+author);
   },
   error : function(data) {
    alert("error" + data);
   }
  });
</script>

@responseBody注解是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML。

@RequestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容。一般情况下来说常用其来处理application/json类型。

Controller:

@Controller
public class PassJsonParam {
 @RequestMapping(value="acceptJsonByEntity",method = RequestMethod.POST)
 @ResponseBody
 public Book acceptJsonByEntity(@RequestBody Book book, HttpServletRequest request){
  System.out.println("当前http请求方式为:"+request.getMethod());
  System.out.println("bookId="+book.getBookId()+", author="+book.getAuthor());
  return book;
 }
}

控制台输出:当前http请求方式为:POST bookId=1, author=Jack

客户端(弹窗):success:1,Jack

如果Controller中的所有方法都需要返回json格式数据,可以使用@RestController注解。
@RestController = @Controller + @ResponseBody

Controller(上面的Controller可以用下面的替换):

@RestController
public class PassJsonParam {
 @RequestMapping(value="acceptJsonByEntity",method = RequestMethod.POST)
 public Book acceptJsonByEntity(@RequestBody Book book, HttpServletRequest request){
  System.out.println("当前http请求方式为:"+request.getMethod());
  System.out.println("bookId="+book.getBookId()+", author="+book.getAuthor());
  return book;
 }
}

注意:使用了@RestController注解后,Controller的方法无法再返回jsp页面或者html,配置的视图解析器也不会起作用。

二、以map方式接收

背景:前台向后台发送ajax请求并且携带很多参数,而后台并没有对应的实体类进行接收又该如何处理呢?最常见的就是表单,这里可以考虑使用map来解决。因为map的数据结构为key-value形式,所以我们可以遍历搜索框表单,将表单的name作为map的key,表单的value作为map的value。

客户端:

<form id="bookForm">
 <input type="text" name="bookName" id="bookName">
 <input type="text" name="author" id="author" >
 <button onclick="submitForm(event)">提交</button>
</form>

<script>
 function submitForm(event) {
  //阻止form默认事件
  event.preventDefault();
  //得到搜索框数据
  var map = new Map();
  $("#bookForm input").each(function () {
   var value = $(this).val();  //input 值
   var name = $(this).attr('name');
   map.set(name,value);
  })

  //Map转为Json的方法
  var obj= Object.create(null);
  for (var [k,v] of map) {
   obj[k] = v;
  }

  $.ajax({
   type: 'POST',
   contentType:'application/json',
   url: "acceptJsonByMap",
   data: JSON.stringify(obj),
   dataType: 'json',
   success: function (data) {
    var bookName = data.bookName;
    var author = data.author;
    alert("bookName ="+bookName+"; author="+author);
   },
   error: function (data) {
    alert("失败啦");
   }
  });
 }
</script>

Controller:

 @RequestMapping(value="acceptJsonByMap")
 @ResponseBody
 public Map<String,Object> acceptJsonByMap(@RequestBody Map<String,Object> paramsMap, HttpServletRequest request){
  System.out.println("当前http请求方式为:"+request.getMethod());
  System.out.println(paramsMap);
  return paramsMap;
 }

控制台输出:当前http请求方式为:POST {bookName=Love, author=Frank}

客户端(弹窗):bookName =Love; author=Frank

三、以list方式接收(以json数组形式传递)

客户端:

<button onclick="clickHere()">clickHere</button>
<script>
 function clickHere() {
  var params1 = {
   "bookId":"123",
   "author":"Rose"
  };
  var params2 = {
   "bookId":"321",
   "author":"Jack"
  };
  var list = [];
  list.push(params1);
  list.push(params2);

  $.ajax({
   type: 'POST',
   contentType:'application/json',
   url: "acceptJsonByList",
   data: JSON.stringify(list),
   dataType: 'json',
   success: function (data) {
    for (let i = 0; i < data.length; i++) {
     var bookId = data[i].bookId;
     var author = data[i].author;
     alert("bookId ="+bookId+"; author="+author);
    }
   },
   error: function (data) {
    alert("失败啦");
   }
  });
 }
</script>

注意:传递到后端时,list应为[ { key1 : value1}{ key2 : value2} ]的json格式数据,否则可能会出现Json parse error错误。

Controller:

 @RequestMapping(value="acceptJsonByList")
 @ResponseBody
 public List<Book> acceptJsonByList(@RequestBody List<Book> book, HttpServletRequest request){
  System.out.println("当前http请求方式为:"+request.getMethod());
  System.out.println(book);
  return book;
 }

注意:这里需要Book实体类进行接收。

控制台输出:当前http请求方式为:POST [entity.Book@1138a75c, entity.Book@22d1cbcf]

客户端(弹窗):bookId =123; author=Rose bookId =321; author=Jack

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • Springmvc 4.x利用@ResponseBody返回Json数据的方法

    下面是官方文档对于@ResponseBody注解的解释: Mapping the response body with the @ResponseBody annotation The @ResponseBody annotation is similar to @RequestBody. This annotation can be put on a method and indicates that the return type should be written straight to

  • springmvc数据的封装过程详解

    spring封装是进行orm封装,可以进行定义数据类型,数据名与接收名相同,进行接收,或者定义类,类的属性名与接收名相同 单个数据类型如图下: 对象类型封装: 其他:乱码处理 在中文字符乱码,需要规定请求响应的编码,可以自己进行过滤器进行过滤设置,但是jar包中给我们提供了此过滤器,我们只需要进行web.xml配置即可 init-param规定的是编译的类型 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们.

  • SpringMVC 向jsp页面传递数据库读取到的值方法

    在开发过程中,我们经常需要将数据库查询到的值放入jsp页面进行显示,在springmvc的controller中,我们采用request将数据传递过去. 思路: 1.在comtroller中调用service层的方法获取数据库的数据,并且将其通过modelandview的addObject方法放置到域中 2.在jsp页面中通过jsp标签进行读取 开发controller.java文件: //查询所有数据到页面显示 @RequestMapping("/dataAll") public M

  • SpringMvc直接接收json数据自动转化为Map的实例

    springMvc直接接收json数据自动转化为Map ,必须加上@RequestBody注解并且前台ajax发送请求的时候需要对数据进行格式化 $.ajax({ type : "POST", url : "/search", data :JSON.stringify(searchData), contentType:"application/json", dataType : "json", success : functi

  • SpringMvc+POI处理excel表数据导入

    一.概念介绍 ApachePOI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能 二.功能相关代码 1.环境说明:JDK1.7+tomcat7+spring 2.配置文件的配置 pom文件中添加POI所需依赖 <!-- 添加POI支持 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi&l

  • Spring MVC实现mysql数据库增删改查完整实例

    最近刚学了springmvc框架,感觉确实方便了不少,减少了大量的冗余代码.就自己做了个小项目练练手,这是个初级的springmvc应用的项目,没有用到mybatis,项目功能还算完善,实现了基本的增删改查的功能. 项目环境: -系统:win10 -开发环境:eclipseOxygenReleaseCandidate3(4.7) -jdk版本:java1.8(121) -mysql:5.7 -spring:4.0 -tomcat:8.5 用到的技术: springmvcspringjspjdbc

  • vue+springmvc导出excel数据的实现代码

    vue端处理 this.$http.get(this.service + '/user/excel',{responseType: 'blob'}).then(({data})=> { console.info(typeof data) var a = document.createElement('a'); var url = window.URL.createObjectURL(data); a.href = url; a.download = '用户统计信息.xls'; a.click()

  • SpringMVC接收与响应json数据的几种方式

    前言 前后端的数据交互,除了通过form表单进行提交外,也可以通过ajax向后端传递和接收json格式数据(这种方式可以实现请求数据和页面分离).本文将总结一下在Spring MVC中接收和响应json数据的几种方式. 话不多说了,来一起看看详细的介绍吧 准备步骤: 1.导入json相关框架的依赖(比如jackson). 2.spring mvc的controller方法正常写,如果需要响应json,增加@responsebody注解. 3.在接受json对应的输入参数前,加上@RequestB

  • SpringMVC返回json数据的三种方式

    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等. 1.第一种方式是spring2时代的产物,也就是每个json视图controller配置一个Jsoniew. 如:<bean

  • 基于$.ajax()方法从服务器获取json数据的几种方式总结

    一.什么是json json是一种取代xml的数据结构,和xml相比,它更小巧但描述能力却很强,网络传输数据使用流量更少,速度更快. json就是一串字符串,使用下面的符号标注. {键值对} : json对象 [{},{},{}] :json数组 "" :双引号内是属性或值 : :冒号前为键,后为值(这个值可以是基本数据类型的值,也可以是数组或对象),所以 {"age": 18} 可以理解为是一个包含age为18的json对象,而[{"age":

  • jQuery实现异步获取json数据的2种方式

    本文实例讲述了jQuery实现异步获取json数据的2种方式,在web程序开发中非常具有实用价值.分享给大家供大家参考之用.具体方法如下: 通常来说,jQuery异步获取json数据有2种方式,一个是$.getJSON方法,一个是$.ajax方法.本文就来实现使用这2种方式异步获取json数据,然后追加到页面. 在根目录下创建data.json文件: { "one" : "Hello", "two" : "World" } 一

  • javascript解析json数据的3种方式

    3种方式解析json数据 复制代码 代码如下: var obj=eval("("+traItem.rel+")"); //性能不好 var obj = (new Function("return " + traItem.rel))(); var obj = JSON.parse(traItem.rel); //这个要求的格式比较严格

  • SpringMVC中controller返回json数据的方法

    本文实例为大家分享了SpringMVC中controller返回json数据的2种方法,供大家参考,具体内容如下 1.jsp的ajax请求: function getJson(){ $.ajax({ type:"get", dataType:"json", url:"<%=basePath %>getJson", success:function(data){ for(var i=0;i<jsonData.length;i++)

  • Springmvc ResponseBody响应json数据实现过程

    该注解用于将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的数据如:json,xml 等,通过 Response 响应给客户端 示例 需求:使用@ResponseBody 注解实现将 controller 方法返回对象转换为 json 响应给客户端. 前置知识点:Springmvc 默认用 MappingJacksonHttpMessageConverter 对json数据进行转换,需要加入jackson 的包. 注:2.7.0以下的

  • 详解springmvc 接收json对象的两种方式

    最近学习了springmvc 接收json对象的两种方式,现在整理出来,具体如下: 1.以实体类方式接收 前端 ajax 提交数据: function fAddObj() { var obj = {}; obj['objname'] = "obj"; obj['pid'] = 1 ; $.ajax({ url: 'admin/Obj/addObj.do', method: 'post', contentType: 'application/json', // 这句不加出现415错误:U

  • SpringMVC通过Ajax处理Json数据的步骤详解

    SpringMVC通过Ajax处理Json数据的实现 一.前言: Ajax: 在不重新加载整个页面的前提下,对网页的部分进行刷新,例如点赞,发送短信验证码功能等等,都可以通过ajax进行实现,Ajax实现了网页的异步刷新 想要实现的效果,点击按钮,前端显示后台发送过来的学生信息,本次我们使用jquery形式的Ajax来完成 二.使用步骤 1.引入jar jar: jackson-annotation.jar jackson-core.jar jackson-datebind.jar 如果不使用M

  • SpringBoot响应Json数据乱码通过配置的解决

    目录 场景 实现 把SpringBoot的response编码设置为utf-8 找到application.properties配置文件 添加如下: #设置响应为utf-8spring.http.encoding.force-response=true 再次刷新浏览器 SpringBoot返回json数据乱码 第一种解决方式 在请求RequestMapping直接设置,只针对请求,在拦截器返回json数据时有可能乱码 @RequestMapping(value ="/user", pr

随机推荐