总结:
@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字符串还必须是下划线格式的!
以下是聊天记录截图,作为以后遇到问题了看:
本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/p/13661506.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2016-09-13 delphi软件启动的顺序解密。