【发布时间】:2020-01-18 06:44:30
【问题描述】:
我的 Spring 应用中有以下控制器:
@Controller
public class UserController {
// Display single user details
@RequestMapping(path = "/users/{id}", method = RequestMethod.GET)
public String getUser(Model model, @PathVariable(value = "id") Integer id) {
if(userService.getUser(id) != null) {
model.addAttribute("user", userService.getUser(id));
return "user_details";
} else {
return "redirect:/users";
}
}
它按我的意愿工作:如果用户存在于数据库中,则显示其详细信息。如果没有,我将被重定向到所有用户的列表。
但是,它只有在我指定整数 ID 时才能正常工作。当我提供其他类型的参数时,它会导致错误。
例如:http://localhost:8080/users/a 给出以下错误信息:
org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; nested exception is java.lang.NumberFormatException: For input string: "a"
很明显,因为它需要一个整数。 我的问题是:
我应该以某种方式保护我的 Controller 方法(如果是,怎么做)以处理错误的参数类型,或者将 Integer 用于路径变量是一种不好的做法,我应该重构我的代码以使用 String 代替?最佳做法是什么?
【问题讨论】:
-
/users/{id:\\d+}这样的东西应该可以解决问题。
标签: spring spring-mvc url controller path-variables