Spring Boot控制器如何正确接收@RequestParam参数?空值问题排查
问题原因
- 你当前使用
@RequestParam注解接收参数,该注解仅能获取URL查询参数(即url后?key=value形式的参数) 或者Content-Type为x-www-form-urlencoded的表单提交参数,无法解析application/json格式的请求体内容,所以你从JSON请求体中传递的name、email都无法被识别,最终接收值为null。
正确实现方式
方案1:使用DTO接收JSON请求体(推荐,符合RESTful规范)
- 首先定义一个参数接收DTO类:
// 可配合Lombok的@Data注解省略getter、setter简化代码 public class StudentUpdateDTO { private String name; private String email; private LocalDate dob; }
- 修改控制器方法,添加
@RequestBody注解解析JSON请求体:
@PutMapping(path = "/{id}") public ResponseEntity<?> updateStudent(@PathVariable("id") Long id, @RequestBody StudentUpdateDTO updateDTO) { Student savedStudent = studentService.updateStudent(id, updateDTO.getName(), updateDTO.getEmail()); return ResponseEntity.ok(savedStudent); }
- 发送请求时需确保请求头
Content-Type设置为application/json,你当前的请求地址和请求体内容无需修改即可正常接收参数。
方案2:使用查询参数传递(无需修改现有控制器代码)
如果你不想调整后端代码,可修改请求方式,将name、email作为URL查询参数传递:
请求地址改为:http://localhost:5000/api/v1/student/1?name=abc&email=abc@email.com
无需携带JSON请求体,即可正常接收参数。
内容的提问来源于stack exchange,提问作者wick3d
相关产品推荐
相关产品推荐

