@RequestBody 处理类型 和 对象 和 json 相互转换
1 @RequestBody 处理类型
在项目中经常看到controller 中有 @RequestBody 字样,他到底有什么作用?
一般使用表单提交数据时不需要使用@RequestBody 即可自动封装数据到对应的 Bean 中。@RequestBody 用来处理Content-Type: application/json, application/xml等
它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。
说明:使用 @RequestBody 解析数据需要添加 jackson 或 fastjson 依赖包。
maven 引入 fastjson 包
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.</version>
</dependency>
2 对象 和 json 相互转换
在项目中经常会遇到对象和 json 之间相互转换,公共类 和 json 对象转换, 静态内部类 和 json 对象转换
2.1 没有内部类时 Student 类
@Data
public class Student { private String id;
private String name;
private int age;
private String sex;
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
json 和 对象 相互转换
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
Student student = new Student();
student.setName("good");
String s = mapper.writeValueAsString(student);
System.out.println(s);
Student hd2 = mapper.readValue(s, Student.class);
System.out.println(hd2);
}
2.2 有静态内部类时 Student 类
@Data
public class Student { private String id;
private String name;
private int age;
private String sex;
private HomeData homeData;
private BigDecimal salary;
private String[] tel; @Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
} @Data
public static class HomeData{
private Address address; @Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
} @Data
public static class Address { private String country;
private String city; @Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
}
}
json 和 对象 之间相互转换
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
Student student = new Student();
Student.HomeData homeData = new Student.HomeData();
Student.HomeData.Address address = new Student.HomeData.Address();
address.setCountry("中国");
address.setCity("上海");
homeData.setAddress(address);
student.setHomeData(homeData);
String s = mapper.writeValueAsString(address);
System.out.println(s);
Student.HomeData.Address hd2 = mapper.readValue(s, Student.HomeData.Address.class);
System.out.println(hd2);
}
说明:主要方法有 mapper.writeValueAsString 和 mapper.readValue
@RequestBody 处理类型 和 对象 和 json 相互转换的更多相关文章
- Object of type 'ListSerializer' is not JSON serializable “listserializer”类型的对象不可JSON序列化
Object of type 'ListSerializer' is not JSON serializable “listserializer”类型的对象不可JSON序列化 一般原因为 序列化的对象 ...
- json相关类库,java对象与json相互转换
有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...
- Java开发中json使用,各对象与json相互转换
Json:一种网络通信使用的数据格式,因为便于解析,比较流行,对象可以转为json,同样json也可以转对象. 下面介绍下Json工具的简单使用(fastjson && jackson ...
- ObjectMapper 对象和json相互转换
一.ObjectMapper ObjectMapper类是Jackson库的主要类.它提供一些功能将转换成Java对象匹配JSON结构,反之亦然.它使用JsonParser和JsonGenerator ...
- 【Python】python对象与json相互转换
转自:http://blog.csdn.net/leilba/article/details/50654256 # -*- coding: UTF-8 -*- import json #自定义类 cl ...
- 使用jackson对Java对象与JSON字符串相互转换的一些总结
本文为菠萝大象原创,如要转载请注明出处.http://www.blogjava.net/bolo 代码无真相,为了最简单的说明,我直接上代码. public class User { private ...
- json对象与string相互转换教程
一.说明 1.1 背景说明 json对象与string相互转换,这东西想写了很多次,但总觉得网上教程比较成熟,所以之前每次都放弃了.但今天又被string转json对象折腾了半天,实在受不了,所以还是 ...
- Json.net实现方便的Json转C#(dynamic动态类型)对象
以前需要将一段json字符串转换为C#对象时,一般都是定义一个与之对应的实体类来接收.这样做有一个很大的缺点,就是当字符串特别长,属性特别多,又有嵌套时,手敲这个实体类就非常痛苦. 比如之前做的一个接 ...
- 使用DataContractJsonSerializer类将类型实例序列化为JSON字符串和反序列化为实例对象 分类: JSON 前端 2014-11-10 10:20 97人阅读 评论(1) 收藏
一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...
随机推荐
- java 读取本地的json文件
首先,要先去下载相关的jar包,否则你是无法做到的. 在百度或者谷歌里面输入java json jar包下载就行了(共7个包). xom-1.1.jar ezmorph-1.0.6.jar json ...
- HDU 1199 && ZOJ 2301 线段树离散化
一段长度未知的线段.一种操作:a b c ,表示区间[a,b]涂为颜色C,w代表白色,b代表黑色,问终于的最长连续白色段,输出起始位置和终止位置 离散化处理.和寻常的离散化不同,须要把点化成线段.左闭 ...
- 优秀web资源
http://www.filewatcher.com 一步一步asp.net_页面静态化管理 http://www.cnblogs.com/ylwn817/articles/2006923.html ...
- Nginx启用ssl以及免费证书申请
主要是这个东西,折腾了我两天,所以记录下来. 最开始是在meteor下面调用一个webservice,但是发现meteor项目的发布环境时https,所以请求的webservice也必须时webser ...
- Struts2(八)访问Servlet API
一.Struts2中的Servlet API 1.1.struts2的Action实现了MVC中C层的作用 针对请求用户显示不同的信息 登录后段保存用户信息 ----session 保存当前在线人数等 ...
- 算法笔记_178:历届试题 邮局(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流.为了方便村民们发信,C村打算在C村建设k个邮局,这样每户村民可以去离自己 ...
- TP框架中的A方法和R方法
ThinkPHP 跨模块调用操作方法(A方法与R方法) 跨模块调用操作方法 前面说了可以使用 $this 来调用当前模块内的方法,但实际情况中还经常会在当前模块调用其他模块的方法.ThinkPHP 内 ...
- java面试第十八天
软件开发流程: 1.可行性分析 2.需求分析->开发测试 3.概要设计->分隔模块,定义框架等 4.详细设计->类设计.接口设计 5.编码 6.测试 7.部署 8.维护 单元测试: ...
- UrlConnection的代理和返回状态码的问题
今天写了一段代码想在service里访问一个外部网站,在service的方法里写了如下代码 System.setProperty("http.proxyType", "4 ...
- Linux安装SQLite轻量级数据库
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在很多嵌入式产 ...