重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
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,配置的视图解析器也不会起作用。
背景:前台向后台发送ajax请求并且携带很多参数,而后台并没有对应的实体类进行接收又该如何处理呢?最常见的就是表单,这里可以考虑使用map来解决。因为map的数据结构为key-value形式,所以我们可以遍历搜索框表单,将表单的name作为map的key,表单的value作为map的value。
客户端:
Controller:
@RequestMapping(value="acceptJsonByMap") @ResponseBody public MapacceptJsonByMap(@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应为[ { key1 : value1}{ key2 : value2} ]的json格式数据,否则可能会出现Json parse error错误。
Controller:
@RequestMapping(value="acceptJsonByList") @ResponseBody public ListacceptJsonByList(@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数据的方法有哪些问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。