@RequestParam使用场景
1. 语法正确性
@PostMapping("/delete")
public HttpJsonResponse deleteProjectConfig(@RequestParam("id") Long id) {// 逻辑实现
}
@RequestParam
可用于 POST 请求,它从 URL 参数 或 表单数据 中获取参数。- 前端可以通过以下两种方式传参:
javascript
// 方式一:URL 参数(query string) fetch('/delete?id=123', { method: 'POST' })// 方式二:表单数据(form data) const formData = new FormData(); formData.append('id', '123'); fetch('/delete', { method: 'POST', body: formData })
2. 潜在问题与建议
(1)幂等性问题
DELETE 请求应具有幂等性(多次调用效果相同),而 POST 不保证。
建议:如果是删除操作,优先使用 @DeleteMapping
:
@DeleteMapping("/{id}") // 路径参数更符合 REST 风格
public HttpJsonResponse deleteProjectConfig(@PathVariable Long id) {// 逻辑实现
}
(2)参数校验
确保 id
不为空:
@PostMapping("/delete")
public HttpJsonResponse deleteProjectConfig(@RequestParam("id") @NotNull Long id) {// 逻辑实现
}
(3)安全风险
直接暴露 ID 可能存在安全风险(如 ID 枚举攻击)。
建议:
- 校验用户权限,确保用户只能删除自己的项目。
- 使用更复杂的标识符(如 UUID)代替自增 ID。
3. 常见误区澄清
-
误区 1:POST 请求只能用
@RequestBody
✅ 错误。@RequestParam
和@PathVariable
均可用于 POST。 -
误区 2:DELETE 请求不能带参数
✅ 错误。DELETE 可通过 URL 参数或路径变量传参(如/delete/123
)。
4. 最佳实践
根据 RESTful 规范,删除操作推荐使用 DELETE
方法 + 路径变量:
java
@DeleteMapping("/{id}")
@ApiOperation("删除战略周期")
@Secured(scopes = "", user = true)
public HttpJsonResponse deleteProjectConfig(@PathVariable Long id) {// 逻辑实现return HttpJsonResponse.success();
}
前端调用:
fetch('/delete/123', { method: 'DELETE' })
总结
你的代码在语法上没有问题,但从 REST 规范 和 最佳实践 角度,建议改用 @DeleteMapping
+ 路径变量的方式实现删除接口。