首页 > 爪哇 > java教程 > 正文

SpringMVC接收和响应json数据的方法介绍(附代码)

不言
发布: 2019-03-12 15:41:28
转载
4559 人浏览过

本篇文章给大家带来的内容是关于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依赖:

        
        
            com.fasterxml.jackson.core
            jackson-core
            2.7.0
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.7.0
        
        
            com.fasterxml.jackson.core
            jackson-annotations
            2.7.0
        
登录后复制

一、以实体类接收

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

客户端:


登录后复制
@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。

客户端:

              
登录后复制

Controller:

    @RequestMapping(value="acceptJsonByMap")
    @ResponseBody
    public Map acceptJsonByMap(@RequestBody Map 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数组形式传递)

客户端:


登录后复制

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

Controller:

    @RequestMapping(value="acceptJsonByList")
    @ResponseBody
    public List acceptJsonByList(@RequestBody List 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

以上是SpringMVC接收和响应json数据的方法介绍(附代码)的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:segmentfault.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!