@RequestMapping接收的参数为null
时间: 2024-04-20 07:19:28 浏览: 11
@RequestMapping注解是Spring框架中用于映射HTTP请求的注解。当使用@RequestMapping接收的参数为null时,通常会出现以下情况:
1. 请求参数未提供:如果在请求中没有提供对应的参数,那么接收到的参数值将为null。这可能是因为客户端未正确发送请求参数或者请求参数被意外删除或修改。
2. 参数类型不匹配:如果请求参数的类型与接收参数的类型不匹配,Spring框架将无法将请求参数转换为对应的类型,导致接收到的参数值为null。在这种情况下,可以检查请求参数的类型是否正确,并确保请求参数能够正确地转换为接收参数的类型。
3. 参数名与请求参数不匹配:如果接收参数的名称与请求参数的名称不匹配,Spring框架将无法将请求参数赋值给接收参数,导致接收到的参数值为null。在这种情况下,可以检查接收参数的名称是否与请求参数的名称一致,并确保它们能够正确地匹配。
相关问题
@ResponseBody 接收body参数
@ ResponseBody 注解用于将方法的返回结果直接写入 HTTP response body 中。它通常用于异步获取数据时,返回 JSON 数据给前端进行处理。当使用 @ResponseBody 注解时,方法的返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。这样可以方便地返回特定格式的数据给前端。
@ ResponseBody 注解一般与 @ RequestMapping 注解一起使用,用于指定该方法对应的 URL 请求,并返回数据给客户端。例如,在使用 AJAX 异步获取数据的情况下,可以在方法上添加 @ ResponseBody 注解,将返回的 JSON 数据直接发送给前端。这样可以减少前后端数据交互的流程,提高系统的响应速度。
需要注意的是,@ ResponseBody 注解只能作用在方法上,而不能作用在形参列表上。它将方法的返回结果直接写入 HTTP response body 中,而 @ RequestBody 注解则是将 HTTP 请求的正文内容(body 参数)封装为对应的 JavaBean 对象。
所以,@ ResponseBody 注解不接收 body 参数,它的作用是将方法的返回结果写入 HTTP response body 中,供前端获取和处理。如果需要接收 body 参数,可以使用 @ RequestBody 注解来封装请求的正文内容为对应的 JavaBean 对象。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [@ResponseBody/@RequestBody用法](https://blog.csdn.net/XQYILU/article/details/118967576)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [@ResponseBody 和 @RequestBody 注解的区别](https://download.csdn.net/download/weixin_38591223/12784602)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
@RestController @RequestMapping("/restful/commonUse") public class CommonUseController { @Autowired private UserService userService; @Autowired private CommonUseService commonUseService; //统一的数据查看 @RequestMapping("/view") public ReturnCodeUtil view(@RequestBody CommonUse commonUse) { ReturnCodeUtil returnCodeUtil = new ReturnCodeUtil(); if(String.valueOf(commonUse.getUserId()).equals("0") || "".equals(commonUse.getUserFlag()) || commonUse.getUserFlag() == null ){ returnCodeUtil.setResult(false); return returnCodeUtil; } List<CommonUse> view = commonUseService.view(commonUse); returnCodeUtil.setResult(true); returnCodeUtil.setData(view); return returnCodeUtil; } //统一的数据更改 @RequestMapping("/edit") public ReturnCodeUtil edit(@RequestBody CommonUse commonUse) { ReturnCodeUtil returnCodeUtil = new ReturnCodeUtil(); if(String.valueOf(commonUse.getUserId()).equals("0") || "".equals(commonUse.getUserFlag()) || commonUse.getUserFlag() == null ){ returnCodeUtil.setResult(false); return returnCodeUtil; } int res = commonUseService.edit(commonUse); if(res>0) { returnCodeUtil.setResult(true); }else returnCodeUtil.setResult(false); return returnCodeUtil; } //统一的数据插入 @RequestMapping("/add") public ReturnCodeUtil add(@RequestBody CommonUse commonUse) { ReturnCodeUtil returnCodeUtil = new ReturnCodeUtil(); int add = commonUseService.add(commonUse); if(add >0){ returnCodeUtil.setResult(true); }else { returnCodeUtil.setResult(false); } return returnCodeUtil; } //统一数据删除 @RequestMapping("/delete") public ReturnCodeUtil delete(@RequestBody CommonUse commonUse) { ReturnCodeUtil returnCodeUtil = new ReturnCodeUtil(); int res = commonUseService.delete(commonUse); if(res >0){ returnCodeUtil.setResult(true); }else { returnCodeUtil.setResult(false); } return returnCodeUtil; } }优化代码
可以将重复的部分提取出来,采用函数式编程的方式进行重构,提高代码的复用性和可读性,优化后的代码如下:
@RestController
@RequestMapping("/restful/commonUse")
public class CommonUseController {
@Autowired
private UserService userService;
@Autowired
private CommonUseService commonUseService;
// 统一的数据操作
private ReturnCodeUtil operateData(Function<CommonUse, Integer> function, CommonUse commonUse) {
ReturnCodeUtil returnCodeUtil = new ReturnCodeUtil();
if (String.valueOf(commonUse.getUserId()).equals("0") || "".equals(commonUse.getUserFlag()) || commonUse.getUserFlag() == null) {
returnCodeUtil.setResult(false);
return returnCodeUtil;
}
int res = function.apply(commonUse);
returnCodeUtil.setResult(res > 0);
return returnCodeUtil;
}
// 统一的数据查看
@RequestMapping("/view")
public ReturnCodeUtil view(@RequestBody CommonUse commonUse) {
List<CommonUse> view = commonUseService.view(commonUse);
ReturnCodeUtil returnCodeUtil = new ReturnCodeUtil();
returnCodeUtil.setResult(true);
returnCodeUtil.setData(view);
return returnCodeUtil;
}
// 统一的数据更改
@RequestMapping("/edit")
public ReturnCodeUtil edit(@RequestBody CommonUse commonUse) {
return operateData(commonUseService::edit, commonUse);
}
// 统一的数据插入
@RequestMapping("/add")
public ReturnCodeUtil add(@RequestBody CommonUse commonUse) {
return operateData(commonUseService::add, commonUse);
}
// 统一数据删除
@RequestMapping("/delete")
public ReturnCodeUtil delete(@RequestBody CommonUse commonUse) {
return operateData(commonUseService::delete, commonUse);
}
}
这里提取了 operateData 函数,用于统一处理数据操作,接收一个 Function 类型的参数,该参数用于指定具体的数据操作方法。同时,view 方法中的代码也进行了简化,使代码更加简洁。