jackson、objectMapper 、JsonAlias、JsonProperty、json。序列化和反序列化研究。
总结:
@JsonAlias:序列化出来是一定是真名,反序列化时可以传真名(驼峰)Json也可以传别名(下划线)Json
@JsonProperty:序列化出来一定是别名,反序列化时也只能传别名Json
真名Json:{"userName":"小李飞刀","userSex":true,"userAge":18}
别名Json:{"user_name":"小李飞刀","user_sex":true,"user_age":18}
==========================================================================
1.首先研究 @JsonAlias
public class UserInfo {
@JsonAlias("user_name")
private String userName;
@JsonAlias("user_sex")
private Boolean userSex;
@JsonAlias("user_age")
private Integer userAge;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Boolean getUserSex() {
return userSex;
}
public void setUserSex(Boolean userSex) {
this.userSex = userSex;
}
public Integer getUserAge() {
return userAge;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
}
public class TestMain {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
UserInfo userInfo = new UserInfo();
userInfo.setUserName("小李飞刀");
userInfo.setUserAge(18);
userInfo.setUserSex(true);
System.out.println(objectMapper.writeValueAsString(userInfo));
}
}

试下反序列化:
public class TestMain2 {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
String json = "{\"userName\":\"小李飞刀\",\"userSex\":true,\"userAge\":18}";
UserInfo userInfo = objectMapper.readValue(json, UserInfo.class);
System.out.println(userInfo.getUserName());
System.out.println(userInfo.getUserSex());
System.out.println(userInfo.getUserAge());
}
}

把json串,变成这样,看他能否反序列化成功。
{"user_name":"小李飞刀","user_sex":true,"user_age":18}
public class TestMain2 {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
String json = "{\"user_name\":\"小李飞刀\",\"user_sex\":true,\"user_age\":18}";
UserInfo userInfo = objectMapper.readValue(json, UserInfo.class);
System.out.println(userInfo.getUserName());
System.out.println(userInfo.getUserSex());
System.out.println(userInfo.getUserAge());
}
}

1.接下来研究 @JsonProperty
public class UserInfo {
@JsonProperty("user_name")
private String userName;
@JsonProperty("user_sex")
private Boolean userSex;
@JsonProperty("user_age")
private Integer userAge;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Boolean getUserSex() {
return userSex;
}
public void setUserSex(Boolean userSex) {
this.userSex = userSex;
}
public Integer getUserAge() {
return userAge;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
}
看下序列化:
public class TestMain {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
UserInfo userInfo = new UserInfo();
userInfo.setUserName("小李飞刀");
userInfo.setUserAge(18);
userInfo.setUserSex(true);
System.out.println(objectMapper.writeValueAsString(userInfo));
}
}

再看下反序列化:
public class TestMain2 {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
String json = "{\"userName\":\"小李飞刀\",\"userSex\":true,\"userAge\":18}";
UserInfo userInfo = objectMapper.readValue(json, UserInfo.class);
System.out.println(userInfo.getUserName());
System.out.println(userInfo.getUserSex());
System.out.println(userInfo.getUserAge());
}
}

修改成下划线再试:
public class TestMain2 {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
String json = "{\"user_ame\":\"小李飞刀\",\"user_sex\":true,\"user_age\":18}";
UserInfo userInfo = objectMapper.readValue(json, UserInfo.class);
System.out.println(userInfo.getUserName());
System.out.println(userInfo.getUserSex());
System.out.println(userInfo.getUserAge());
}
}

==================================================================================================================================================
上面研究了在 main方法 执行的结果,接下来用最接近使用场景的来测试 建立一个 controller UserInfo 做入参。
1.还是老方法先测试 @JsonAlias
public class UserInfo {
@JsonAlias("user_name")
private String userName;
@JsonAlias("user_sex")
private Boolean userSex;
@JsonAlias("user_age")
private Integer userAge;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Boolean getUserSex() {
return userSex;
}
public void setUserSex(Boolean userSex) {
this.userSex = userSex;
}
public Integer getUserAge() {
return userAge;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
}
用这2个Json入参,做测试:
{"userName":"小李飞刀","userSex":true,"userAge":18}
{"user_name":"小李飞刀","user_sex":true,"user_age":18}
@RestController
public class JsonAliasController { @PostMapping("/JsonAlias")
public UserInfo go(@RequestBody UserInfo userInfo){
System.out.println(userInfo.getUserName());
System.out.println(userInfo.getUserAge());
System.out.println(userInfo.getUserSex());
return userInfo;
}
}


接下来换做下划线做入参,看下反序列化的结果:


2.好了,接下来再来研究一下@JsonProperty
public class UserInfo {
@JsonProperty("user_name")
private String userName;
@JsonProperty("user_sex")
private Boolean userSex;
@JsonProperty("user_age")
private Integer userAge;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Boolean getUserSex() {
return userSex;
}
public void setUserSex(Boolean userSex) {
this.userSex = userSex;
}
public Integer getUserAge() {
return userAge;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
}
@RestController
public class JsonPropertyController { @PostMapping("/JsonProperty")
public UserInfo go(@RequestBody UserInfo userInfo){
System.out.println(userInfo.getUserName());
System.out.println(userInfo.getUserAge());
System.out.println(userInfo.getUserSex());
return userInfo;
}
}


再来试一下 下划线别名:


==============================================================================================================================================
接下来是针对各个电商平台的接口,让传Bean的情况,首先要明确一点,各个平台官网上的文档是假象,看似是传 Bean,其实就是一个 json字符串,而且更变态的是这个Json字符串还必须是下划线格式的!
以下是聊天记录截图,作为以后遇到问题了看:








jackson、objectMapper 、JsonAlias、JsonProperty、json。序列化和反序列化研究。的更多相关文章
- Java下用Jackson进行JSON序列化和反序列化(转)
Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的J ...
- Scala中使用 Jackson API 进行JSON序列化和反序列化
1. 什么是 Json 序列化 和 反序列化 序列化 => 将 Java对象 转换成 json字符串反序列化 => 将 json字符串 转换成 Java对象 2. 依赖包 说明 < ...
- Jaskson精讲第7篇-类继承关系下的JSON序列化与反序列化JsonTypeInfo
Jackson是Spring Boot(SpringBoot)默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的, ...
- 几种常用的json序列化和反序列化工具介绍
一.前言 Json序列化和反序列化工作中会时常用到,也是目前数据交互的常用格式,Rest风格的接口加上json格式的数据交互,真的是天作之合. 目前Json字符与Json对象的相互转换方式有很多,接下 ...
- Newtonsoft.Json 序列化和反序列化 时间格式
From : http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeO ...
- Newtonsoft.Json 序列化和反序列化 时间格式 [转]
1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg: A a=new A(); a.Name="Elain ...
- [转]Newtonsoft.Json 序列化和反序列化 时间格式
本文转自:http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeObj ...
- Newtonsoft.Json 序列化和反序列化 以及时间格式
1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg: A a=new A(); a.Name="Elain ...
- 我写了一个简单的JSON序列化和反序列化的工具
背景 互联网上有许多可用的Json序列化和反序列化的工具,例如fastjson,jackson,Gson等等,那么,我为什么还要自己写一个? 项目不方便依赖其他第三方库.比如有时候我们编写SDK,考虑 ...
- DotNet的JSON序列化与反序列化
JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...
随机推荐
- P1765
和那道题一样,这次用的getchar,结果对了可是洛谷评测WA了,换成scanf单个字符,结果还是WA了,换成直接getline读入整个字符串就对了. 可见读入单个字符的方式有可能出现各种小错,尤其是 ...
- 使用Amber计算单点能三步走
技术背景 Amber是一个在分子动力学中非常常用的一个软件,可以用于进行分子动力学模拟计算,可以与一些软件配合进行增强采样.这里我们简单介绍一下如何使用Amber去计算一个分子构象的单点势能值,及其对 ...
- WebApi允许跨域
services.AddCors(options => { options.AddPolicy("abc", builder => { //App:CorsOrigin ...
- [转帖]mysql - 使用文件中的 mysql 加载数据格式化 csv 日期列
https://www.coder.work/article/2481907#:~:text=LOAD%20DATA%20INFILE%20%27%2Finvoices%2Finvoice138130 ...
- [转帖]Linux中查找大文件两种姿势
https://rumenz.com/rumenbiji/linux-find-du-max-file.html 使用find命令查找大文件 find命令是Linux系统管理员工具库中最强大的工具之一 ...
- [转帖]Promethues + Grafana + AlertManager使用总结
Prometheus是一个开源监控报警系统和时序列数据库,通常会使用Grafana来美化数据展示. 1|01. 监控系统基础架 1|11.1核心组件 Prometheus Server, 主要用于抓取 ...
- Jmeter学习之八_测试kafka
Jmeter学习之八_测试kafka 背景 最近在持续学习. 昨天学习了grafana展示Jmeter测试数据库的结果 今天想着能够测试一下kafka验证一下kafka的吞吐量等信息 说干就干的. 遇 ...
- Python学习之十九_程序运行时间的验证
Python学习之十九_程序运行时间的验证 背景 最近一段时间比较忙. 而且还遇到了一个lua脚本优化redis访问的场景. 想着自己还在学习python(时断时续) 所以想借着这个场景,学习一下py ...
- [转帖]Datadog 能成为最大的云监控厂商吗
https://xie.infoq.cn/article/901cfd6b284e3e103ac70aeb3 作者:睿象云 2021-03-25 本文字数:2256 字 阅读完需:约 7 分钟 D ...
- [转帖]字节跳动开源 Shmipc:基于共享内存的高性能 IPC
https://maimai.cn/article/detail?fid=1780832041&efid=WeW8ji-LiPaXA8QER_Q1YQ 简介 CloudWeGo - Shmip ...