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类型,也需兼容处理。

✅ 正确做法如下:

  1. 为每个字段添加 @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
ResponseEntity response = 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首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?