Java RestTemplate JSON反序列化字段为空的解决方案
发布时间 - 2026-01-08 00:00:00 点击率:次使用resttemplate将json数组映射为java对象数组时,若实体类字段始终为null,通常因json键名与java字段名不匹配且缺少反序列化注解导致;添加@jsonproperty显式绑定字段可解决此问题。
当RestTemplate返回Employee[]却所有字段均为null,根本原因在于Jackson默认无法自动将JSON中的下划线命名(如employeeId)或嵌套结构(如email数组中的HTML链接)映射到Java驼峰字段,尤其在字段名不完全一致、存在嵌套或特殊格式时,反序列化会静默失败。
你的JSON中email是一个字符串数组(含HTML 标签),而Employee类中定义的是单个String email字段——这本身就会导致反序列化失败。此外,employeeId在JSON中是字符串("123"),但Java字段为Long类型,也需兼容处理。
✅ 正确做法如下:
-
为每个字段添加 @JsonProperty 注解,明确指定JSON字段名:
import com.fasterxml.jackson.annotation.JsonProperty;
public class Employee { @JsonProperty("employeeId") private Long employeeId;
@JsonProperty("firstName")
private String firstName;
@JsonProperty("lastName")
private String lastName;
@JsonProperty("position")
private String position;
@JsonProperty("email")
private List email; // 注意:JSON中是数组,应声明为List
// 构造函数、getter/setter(必须提供!)
public Employee() {}
// getter/setter 略(IDE可自动生成) }
立即学习“Java免费学习笔记(深入)”;
2. **调整数据访问逻辑**(避免空指针): ```java ResponseEntityresponse = restTemplate.exchange( builder.build().encode().toUri(), HttpMethod.GET, requestEntity, Employee[].class ); if (response.getStatusCode().is2xxSuccessful() && response.getBody() != null) { for (Employee emp : response.getBody()) { System.out.println("ID: " + emp.getEmployeeId()); System.out.println("Name: " + emp.getFirstName() + " " + emp.getLastName()); System.out.println("Email (first): " + (emp.getEmail() != null && !emp.getEmail().isEmpty() ? emp.getEmail().get(0) : "N/A")); } }
⚠️ 重要注意事项:
- @JsonProperty 是Jackson核心注解,确保项目已引入 jackson-databind(Spring Boot 默认包含);
- 若需从HTML邮箱链接中提取纯邮箱地址(如 [email protected] → [email protected]),需额外使用JSoup或正则解析,不能依赖Jackson自动完成;
- employeeId 字段若JSON中为字符串(如 "123"),建议改为 String employeeId 或添加 @JsonDeserialize(using = StringToLongDeserializer.class) 自定义转换器;
- 始终检查 response.getBody() 是否为 null,并验证HTTP状态码,避免NPE。
? 进阶建议:对复杂嵌套响应(如外层data对象),可定义顶层封装类(如ApiResponse),而非直接映射数组,提升健壮性与可维护性。
# java
# html
# js
# json
# ai
# 邮箱
# 状态码
# 数据访问
# 字符串数组
# json数组
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
网站页面设计需要考虑到这些问题
android nfc常用标签读取总结
如何快速完成中国万网建站详细流程?
浅谈redis在项目中的应用
Laravel如何实现API速率限制?(Rate Limiting教程)
Android滚轮选择时间控件使用详解
Swift中swift中的switch 语句
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
如何在建站之星绑定自定义域名?
Laravel怎么连接多个数据库_Laravel多数据库连接配置
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
如何用狗爹虚拟主机快速搭建网站?
微信公众帐号开发教程之图文消息全攻略
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
香港服务器WordPress建站指南:SEO优化与高效部署策略
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
如何为不同团队 ID 动态生成多个“认领值班”按钮
如何快速登录WAP自助建站平台?
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
,网页ppt怎么弄成自己的ppt?
利用JavaScript实现拖拽改变元素大小
JavaScript如何实现错误处理_try...catch如何捕获异常?
利用python获取某年中每个月的第一天和最后一天
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
焦点电影公司作品,电影焦点结局是什么?
linux写shell需要注意的问题(必看)
如何基于云服务器快速搭建个人网站?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
创业网站制作流程,创业网站可靠吗?
制作旅游网站html,怎样注册旅游网站?
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
中山网站推广排名,中山信息港登录入口?
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
个人摄影网站制作流程,摄影爱好者都去什么网站?
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
如何在建站之星网店版论坛获取技术支持?
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
如何在云主机上快速搭建多站点网站?
如何挑选最适合建站的高性能VPS主机?
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
如何快速查询域名建站关键信息?
Swift中循环语句中的转移语句 break 和 continue
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?


builder.build().encode().toUri(),
HttpMethod.GET,
requestEntity,
Employee[].class
);
if (response.getStatusCode().is2xxSuccessful() && response.getBody() != null) {
for (Employee emp : response.getBody()) {
System.out.println("ID: " + emp.getEmployeeId());
System.out.println("Name: " + emp.getFirstName() + " " + emp.getLastName());
System.out.println("Email (first): " +
(emp.getEmail() != null && !emp.getEmail().isEmpty() ?
emp.getEmail().get(0) : "N/A"));
}
}