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

Spring Boot中‘找不到符号’错误及数据为null问题求助

问题代码

//UserController.java
@RestController
@RequestMapping("/user")
public class UserController {

    @PostMapping("/hello")
    public String hello(@RequestBody User user) {
        //error: cannot find symbol
        System.out.println(user.getName());
        System.out.println(user.getMessage());
        return "Hello ";
    }
}

// User.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

    @JsonProperty
    private String name;

    @JsonProperty
    private String message;
}

问题1:构建时出现cannot find symbol错误,明明有成员变量为啥报错?

这是因为Lombok的@Data注解未生效,导致编译阶段没有自动生成getName()、getMessage()这类getter方法。常见原因及解决方式:

  • 未引入Lombok依赖:检查Maven的pom.xml或Gradle的build.gradle,确认已添加Lombok的依赖配置。
  • IDE未安装Lombok插件:IDEA、Eclipse等IDE需要安装Lombok插件,否则无法识别Lombok动态生成的方法,编译会直接报错。
  • 注解处理器未开启:IDEA需在设置中开启「Enable annotation processing」,Maven/Gradle也要确保启用注解处理器,让Lombok能在编译时生成对应代码。

问题2:不加@JsonProperty时接收数据为null,变量不是大写开头为啥会这样?

主要是以下几种情况导致:

  1. 请求JSON字段名与实体变量名不匹配:比如你发送的JSON里字段是Name、MESSAGE或者user_name,和实体类的name、message精确名称不一致,Jackson默认只会匹配完全相同的字段名。
  2. 请求Content-Type错误:如果发送请求时用的是application/x-www-form-urlencoded(表单格式),而非application/json,@RequestBody无法正确解析JSON数据,会导致实体类属性全为null。
  3. Jackson默认命名策略问题:部分Spring Boot版本中,Jackson默认属性命名策略为SNAKE_CASE(下划线分隔),若你的请求用驼峰命名,实体用小写字母,就会匹配失败。可通过配置spring.jackson.property-naming-strategy=LOWER_CAMEL_CASE调整命名策略。

内容的提问来源于stack exchange,提问作者Yun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:57:21