1 @RequestBody 处理类型

在项目中经常看到controller 中有 @RequestBody 字样,他到底有什么作用?

一般使用表单提交数据时不需要使用@RequestBody 即可自动封装数据到对应的 Bean 中。@RequestBody 用来处理Content-Type: application/json, application/xml等

它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。

说明:使用 @RequestBody 解析数据需要添加 jackson 或 fastjson 依赖包。

maven 引入 fastjson 包

  1. <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>fastjson</artifactId>
  5. <version>1.2.</version>
  6. </dependency>

2 对象 和 json 相互转换

在项目中经常会遇到对象和 json 之间相互转换,公共类 和 json 对象转换, 静态内部类 和 json 对象转换

2.1 没有内部类时 Student 类

  1. @Data
  2. public class Student {
  3.  
  4. private String id;
  5. private String name;
  6. private int age;
  7. private String sex;
  8. @Override
  9. public String toString() {
  10. return ToStringBuilder.reflectionToString(this);
  11. }
  12. }

json 和 对象 相互转换

  1. public static void main(String[] args) throws IOException {
  2. ObjectMapper mapper = new ObjectMapper();
  3.  
  4. Student student = new Student();
  5. student.setName("good");
  6.  
  7. String s = mapper.writeValueAsString(student);
  8. System.out.println(s);
  9.  
  10. Student hd2 = mapper.readValue(s, Student.class);
  11. System.out.println(hd2);
  12.  
  13. }

2.2 有静态内部类时 Student 类

  1. @Data
  2. public class Student {
  3.  
  4. private String id;
  5. private String name;
  6. private int age;
  7. private String sex;
  8. private HomeData homeData;
  9. private BigDecimal salary;
  10. private String[] tel;
  11.  
  12. @Override
  13. public String toString() {
  14. return ToStringBuilder.reflectionToString(this);
  15. }
  16.  
  17. @Data
  18. public static class HomeData{
  19. private Address address;
  20.  
  21. @Override
  22. public String toString() {
  23. return ToStringBuilder.reflectionToString(this);
  24. }
  25.  
  26. @Data
  27. public static class Address {
  28.  
  29. private String country;
  30. private String city;
  31.  
  32. @Override
  33. public String toString() {
  34. return ToStringBuilder.reflectionToString(this);
  35. }
  36. }
  37. }
  38. }

json 和 对象 之间相互转换

  1. public static void main(String[] args) throws IOException {
  2. ObjectMapper mapper = new ObjectMapper();
  3.  
  4. Student student = new Student();
  5.  
  6. Student.HomeData homeData = new Student.HomeData();
  7. Student.HomeData.Address address = new Student.HomeData.Address();
  8. address.setCountry("中国");
  9. address.setCity("上海");
  10. homeData.setAddress(address);
  11. student.setHomeData(homeData);
  12.  
  13. String s = mapper.writeValueAsString(address);
  14. System.out.println(s);
  15.  
  16. Student.HomeData.Address hd2 = mapper.readValue(s, Student.HomeData.Address.class);
  17. System.out.println(hd2);
  18.  
  19. }

说明:主要方法有 mapper.writeValueAsString 和 mapper.readValue

@RequestBody 处理类型 和 对象 和 json 相互转换的更多相关文章

  1. Object of type 'ListSerializer' is not JSON serializable “listserializer”类型的对象不可JSON序列化

    Object of type 'ListSerializer' is not JSON serializable “listserializer”类型的对象不可JSON序列化 一般原因为 序列化的对象 ...

  2. json相关类库,java对象与json相互转换

    有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...

  3. Java开发中json使用,各对象与json相互转换

    Json:一种网络通信使用的数据格式,因为便于解析,比较流行,对象可以转为json,同样json也可以转对象. 下面介绍下Json工具的简单使用(fastjson && jackson ...

  4. ObjectMapper 对象和json相互转换

    一.ObjectMapper ObjectMapper类是Jackson库的主要类.它提供一些功能将转换成Java对象匹配JSON结构,反之亦然.它使用JsonParser和JsonGenerator ...

  5. 【Python】python对象与json相互转换

    转自:http://blog.csdn.net/leilba/article/details/50654256 # -*- coding: UTF-8 -*- import json #自定义类 cl ...

  6. 使用jackson对Java对象与JSON字符串相互转换的一些总结

    本文为菠萝大象原创,如要转载请注明出处.http://www.blogjava.net/bolo 代码无真相,为了最简单的说明,我直接上代码. public class User { private  ...

  7. json对象与string相互转换教程

    一.说明 1.1 背景说明 json对象与string相互转换,这东西想写了很多次,但总觉得网上教程比较成熟,所以之前每次都放弃了.但今天又被string转json对象折腾了半天,实在受不了,所以还是 ...

  8. Json.net实现方便的Json转C#(dynamic动态类型)对象

    以前需要将一段json字符串转换为C#对象时,一般都是定义一个与之对应的实体类来接收.这样做有一个很大的缺点,就是当字符串特别长,属性特别多,又有嵌套时,手敲这个实体类就非常痛苦. 比如之前做的一个接 ...

  9. 使用DataContractJsonSerializer类将类型实例序列化为JSON字符串和反序列化为实例对象 分类: JSON 前端 2014-11-10 10:20 97人阅读 评论(1) 收藏

    一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...

随机推荐

  1. GridControl 获取某分组的第一个孩子

    int iGroupRowHandle = this.gridControlView.FocusedRowHandle; ) { int iChildCount = this.gridControl. ...

  2. Linux Shell处理文本最常用的工具大盘点

    导读 本文将介绍Linux下使用Shell处理文本时最常用的工具:find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk:提供的例子和参数都是最常用和最为实 ...

  3. Sqlserver存储过程生成日期维度

    话不多说,之前已经有一篇日志是利用oracle的存储过程生成日期维度表,接下来我们就用sqlserver来实现这个操作,如下面的步骤所示 1:创建日期维度表(Dim_time) USE [DW] GO ...

  4. web中的水晶报表 "出现通信错误。将停止打印"

    被这个问题快折腾死,死活都找不到原因,找了一堆解答,无外乎这几种情况,但都不管用 在Page_Init中绑定数据.无效. activex控件的版本,我试过10.2.0.1146等多个版本的dll,10 ...

  5. lua接收图片并进行md5处理

    需要luacurl(http://luacurl.luaforge.net/)和MD5两个库函数 curl = require("luacurl") require("m ...

  6. Discuz常见小问题-修改了模块,如何重新移动原有模块的帖子

    如果还能找到这个帖子(比如用搜索关键字的方法,我们看到他现在已经在CodeSys控制器的目录下,可以点击那个CodeSys控制器的超链接看到里面所有帖子),打开这个帖子之后可以点击移动,然后选择新的目 ...

  7. 第十一节,命名空间namespace

    1,命名空间的定义 命名空间可以把不同的方法分散到不同的文件去实现,如果你会objective-C,他的作用和里面的类目有异曲同工之妙.当然了也有很多不同的地方,首先要明白的是,命名空间并不是一个类, ...

  8. uni-app 生命周期

    生命周期分为:页面生命周期和应用生命周期 生命周期可参考:uni-app官方API 注意平台支持,仅某个平台支持会显示,5+App是超HTML5+的App方案. 例如分享:只有小程序支持.这时我们就要 ...

  9. php之快速入门学习-10(数组)

    PHP 数组 数组能够在单个变量中存储多个值: <?php $cars=array("Volvo","BMW","Toyota"); ...

  10. JavaScript二(第一个js程序)

    一.<script>xxxx</script>标签解析 1.charset :可选,表示通过src属性指定的字符集,由于大多数浏览器忽略它,所以很少有人用它2.defer:可选 ...