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,变量不是大写开头为啥会这样?
主要是以下几种情况导致:
- 请求JSON字段名与实体变量名不匹配:比如你发送的JSON里字段是
Name、MESSAGE或者user_name,和实体类的name、message精确名称不一致,Jackson默认只会匹配完全相同的字段名。 - 请求Content-Type错误:如果发送请求时用的是
application/x-www-form-urlencoded(表单格式),而非application/json,@RequestBody无法正确解析JSON数据,会导致实体类属性全为null。 - Jackson默认命名策略问题:部分Spring Boot版本中,Jackson默认属性命名策略为
SNAKE_CASE(下划线分隔),若你的请求用驼峰命名,实体用小写字母,就会匹配失败。可通过配置spring.jackson.property-naming-strategy=LOWER_CAMEL_CASE调整命名策略。
内容的提问来源于stack exchange,提问作者Yun
相关产品推荐
相关产品推荐

