首先简单介绍下 @PathVariable 和 @RequestParam:
- @PathVariable 用于接收 URL 中的参数,通常是在 URL 中使用“/”,如 /user/{id}
- @RequestParam 用于接收请求参数,通常是在 URL 中使用“?”,如 /user?id=1
当使用 @PathVariable 或 @RequestParam 时,如果传入的参数为空(即 null 或 ""),则在处理请求时可能会出现错误,因此需要做一些处理来避免错误的发生。
以下是解决“@PathVariable和@RequestParam传参为空问题”的完整攻略:
1. @PathVariable 传参为空问题及解决
1.1 问题描述
当使用 @PathVariable 接收参数时,如果参数为空,会抛出异常,如下所示:
@RequestMapping("/user/{id}")
public User getUser(@PathVariable Long id) {
return userService.getUserById(id);
}
如果请求 /user/ 时,会抛出异常:
java.lang.IllegalArgumentException: Could not resolve placeholder 'id' in value "/user/{id}"
1.2 解决方法
可以使用 defaultValue 参数来指定默认值,如下所示:
@RequestMapping("/user/{id}")
public User getUser(@PathVariable(name = "id", required = false) Long id) {
if (id == null) {
// 返回默认值
return userService.getDefaultUser();
}
return userService.getUserById(id);
}
或者使用 if 判断参数是否为空,如下所示:
@RequestMapping("/user/{id}")
public User getUser(@PathVariable Long id) {
if (id == null) {
throw new IllegalArgumentException("参数为空");
}
return userService.getUserById(id);
}
2. @RequestParam 传参为空问题及解决
2.1 问题描述
当使用 @RequestParam 接收参数时,如果参数为空,会使用 defaultValue 指定的默认值,如下所示:
@RequestMapping("/user")
public User getUser(@RequestParam(name = "id", required = false, defaultValue = "0") Long id) {
if (id == null || id <= 0) {
throw new IllegalArgumentException("参数错误");
}
return userService.getUserById(id);
}
如果请求 /user?id= 时,默认会将参数设置为 defaultValue,此时 id 为 0。
2.2 解决方法
可以使用 String 类型来接收参数,然后使用 StringUtils.isEmpty 判断参数是否为空,如下所示:
@RequestMapping("/user")
public User getUser(@RequestParam(name = "id", required = false) String idStr) {
Long id = null;
if (!StringUtils.isEmpty(idStr)) {
id = Long.valueOf(idStr);
}
if (id == null || id <= 0) {
throw new IllegalArgumentException("参数错误");
}
return userService.getUserById(id);
}
这样,即使参数为空,也不会抛出异常,而是会抛出参数错误的异常。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:@PathVariable和@RequestParam传参为空问题及解决 - Python技术站