Java控制器:如何更新PostMapping适配含数组的请求体?
适配新请求体的控制器修改方案
方案一:调整HashMap泛型(快速适配)
原代码的HashMap<String, String>仅支持字符串类型值,新请求体中的ids是字符串数组,因此将泛型改为HashMap<String, Object>,即可兼容字符串与数组类型。后续在方法内需要把ids对应的对象转换为List<String>使用:
@PostMapping("/employees") public ResponseEntity<EmployeeResponse> getMatchingValues(@RequestBody HashMap<String, Object> params) { // 获取emp_id String empId = (String) params.get("emp_id"); // 获取并转换ids为List<String> List<String> ids = (List<String>) params.get("ids"); // 后续业务逻辑处理 return ResponseEntity.ok(new EmployeeResponse()); }
方案二:创建专用DTO类(推荐,类型安全)
这是Spring项目中更规范的做法,定义与请求体结构匹配的DTO类,Spring会自动完成JSON到对象的绑定,类型更安全,也便于后续扩展字段或添加校验:
1. 定义请求DTO类
public class EmployeeRequest { private String emp_id; private List<String> ids; // 生成getter和setter方法,也可使用Lombok的@Data注解简化代码 public String getEmp_id() { return emp_id; } public void setEmp_id(String emp_id) { this.emp_id = emp_id; } public List<String> getIds() { return ids; } public void setIds(List<String> ids) { this.ids = ids; } }
2. 修改控制器方法
@PostMapping("/employees") public ResponseEntity<EmployeeResponse> getMatchingValues(@RequestBody EmployeeRequest request) { String empId = request.getEmp_id(); List<String> ids = request.getIds(); // 后续业务逻辑处理 return ResponseEntity.ok(new EmployeeResponse()); }
注意:原控制器代码中
@PostMapping("/employees)存在语法错误,缺少闭合引号,修改后需写成@PostMapping("/employees")
内容的提问来源于stack exchange,提问作者Anamika
相关产品推荐
相关产品推荐

