总结:

@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。序列化和反序列化研究。的更多相关文章

  1. Java下用Jackson进行JSON序列化和反序列化(转)

    Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的J ...

  2. Scala中使用 Jackson API 进行JSON序列化和反序列化

    1.  什么是 Json 序列化 和 反序列化 序列化 => 将 Java对象 转换成 json字符串反序列化 => 将 json字符串 转换成 Java对象 2. 依赖包 说明 < ...

  3. Jaskson精讲第7篇-类继承关系下的JSON序列化与反序列化JsonTypeInfo

    Jackson是Spring Boot(SpringBoot)默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的, ...

  4. 几种常用的json序列化和反序列化工具介绍

    一.前言 Json序列化和反序列化工作中会时常用到,也是目前数据交互的常用格式,Rest风格的接口加上json格式的数据交互,真的是天作之合. 目前Json字符与Json对象的相互转换方式有很多,接下 ...

  5. Newtonsoft.Json 序列化和反序列化 时间格式

    From : http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeO ...

  6. Newtonsoft.Json 序列化和反序列化 时间格式 [转]

    1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg:   A a=new A(); a.Name="Elain ...

  7. [转]Newtonsoft.Json 序列化和反序列化 时间格式

    本文转自:http://www.cnblogs.com/litian/p/3870975.html 1.JSON序列化 string JsonStr= JsonConvert.SerializeObj ...

  8. Newtonsoft.Json 序列化和反序列化 以及时间格式

    1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg:   A a=new A(); a.Name="Elain ...

  9. 我写了一个简单的JSON序列化和反序列化的工具

    背景 互联网上有许多可用的Json序列化和反序列化的工具,例如fastjson,jackson,Gson等等,那么,我为什么还要自己写一个? 项目不方便依赖其他第三方库.比如有时候我们编写SDK,考虑 ...

  10. DotNet的JSON序列化与反序列化

    JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...

随机推荐

  1. Java虚拟机——内存区域及内存溢出异常

    一.Java内存区域 1.概述 对于java程序员来说,在虚拟机的自动内存管理机制的帮助下,不需要为每一个new操作去写delete/free代码,而且不容易出现内存泄漏和内存溢出问题.但是把内存控制 ...

  2. 编写Java代码时应该避免的6个坑

    通常情况下,我们都希望我们的代码是高效和兼容的,但是实际情况下代码中常常含有一些隐藏的坑,只有等出现异常时我们才会去解决它.本文是一篇比较简短的文章,列出了开发人员在编写 Java 程序时常犯的错误, ...

  3. Java 使用二分查找快速定位元素位置

    转载请注明出处: 快速定位 一个有序数列中 某一个元素的位置: 共有三种思路: 第一种:使用 for 循环,匹配元素值 与循环变量的值是否相等,相等则循环变量时的 i 则为元素位置 第二种:使用 二分 ...

  4. 【架构师视角系列】Apollo配置中心之Client端(二)

    原创文章,转载请标注.https://www.cnblogs.com/boycelee/p/17978027 目录 声明 配置中心系列文章 一.客户端架构 1.Config Service职责 (1) ...

  5. Verdi基础-01

    Verdi使用目标 生成fsdb波形 查看fsdb波形 追踪RTL代码 目录 Verdi历史 生成fsdb波形 三个变量&&三个命令 变量PATH LD_LIBRARY_PATH so ...

  6. TCP连接状态的多种判断方法

    ​ 前言 在TCP网络编程模型中,无论是客户端还是服务端,在网络编程的过程中都需要判断连接的对方网络状态是否正常.在linux系统中,有很多种方式可以判断连接的对方网络是否已经断开. 通过错误码和信号 ...

  7. [转帖]46岁加入谷歌,51岁发明Go,他的编程原则影响了一大批程序员!

    https://www.zhihu.com/tardis/zm/art/551945410?source_id=1005 今年3月,万众瞩目的Go 1.18版本发布,Go终于开始支持泛型了!该版本不仅 ...

  8. [转帖]Oracle与防火墙

    https://www.laoxiong.net/oracle_and_firewall.html 老熊 Oracle数据库管理 2009-04-20 最近有两次Oracle数据库故障与防火墙有关.这 ...

  9. Python学习之七_input和print

    Python学习之七_input和print 摘要 python3 之后 函数必须带 () 了 因为我开始学习的比较晚, 所以准备Python3开始学起 前面主要是模仿别人的代码进行学习 后续慢慢学习 ...

  10. [转帖]IPv6地址解析库,窥探IPv6地址中包含的信息

    https://zhuanlan.zhihu.com/p/479028720 大家好,我是明说网络的小明同学. 今天和大家介绍一个IPv6 地址解析库IPv6 address Parser :http ...