You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实体Getter方法返回Null引发NullPointerException问题排查求助

问题分析与解决方案

首先明确:你的opinion.getCollaboratorName()返回null不是因为getter方法失效——从控制台打印的opinion.toString()结果来看,Opinion对象本身的collaboratorName字段就是null,getter只是如实返回了这个值。

核心原因排查

从控制台输出能看到两个关键信息:

  • 从@RequestBody解析得到的Opinion对象,collaboratorName始终为null
  • JWT令牌里的opinionsList中,id=8的Opinion的collaboratorName是有值的(Stasy)

这说明前端发送PUT请求时,没有将collaboratorName字段(或对应正确的键名)包含在请求体的JSON中,或者JSON键名和实体类字段名不匹配,导致Jackson无法正确将JSON值映射到实体类字段。

具体排查步骤与修复方案

1. 检查前端请求体的JSON结构

确认前端发送的PUT请求的JSON数据里,是否包含collaboratorName字段(注意是驼峰命名)。如果前端传的是下划线命名的collaborator_name,可以通过以下方式处理:

  • 方案一:修改前端,将字段名改为驼峰的collaboratorName
  • 方案二:在实体类字段上添加@JsonProperty("collaborator_name")注解,指定JSON序列化时的键名:
@Column(name="collaborator_name",nullable=false)
@JsonProperty("collaborator_name")
private String collaboratorName;

或者全局开启Spring Boot的下划线转驼峰配置,在application.properties中添加:

spring.jackson.property-naming-strategy=SNAKE_CASE

2. 确认实体类的序列化基础配置

Jackson默认需要无参构造函数来实例化对象,如果你的Opinion类只有带参构造,会导致字段无法正确赋值。添加无参构造:

public Opinion() {
}

3. 修复控制器中的变量名错误(额外问题)

你的控制器代码里存在未定义变量的笔误,会引发另一个NullPointerException:

String username = jwtDecoder.decodeUserInfoFromDashboardToken(dashboardToken);
System.out.println("email in PutMapping Opinions:" + username);
// 此处email变量未定义,需替换为实际从JWT中提取的邮箱值或修正变量名
User user = userServiceImpl.findUserByEmail(email);

验证方法

修改后,先用Postman等工具发送包含collaboratorName字段的PUT请求,确认控制台打印的Opinion对象中该字段有值,再测试业务逻辑。


内容的提问来源于stack exchange,提问作者Tsai Hsuan Hsieh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:15:00