spring 引导中的 MethodArgumentTypeMismatchException
MethodArgumentTypeMismatchException in spring boot
我尝试通过在 url 中获取 ID 来删除用户,但出现错误:
Failed to convert value of type 'java.lang.String' to required type 'int';
nested exception is java.lang.NumberFormatException: For input string:
我将 int id 更改为 String id,但是 deleteMyUser()
将不起作用,因为它接受整数。
代码:
<a href="/delete-user?id=${user.id}">x</a>
@RequestMapping("/delete-user{id}")
public String deleteUser(@PathVariable("id") int id,HttpServletRequest request)
{
request.setAttribute("mode","MODE_HOME");
userService.deleteMyUser(id);
return "welcome";
}
这个怎么样:
RequestMapping("/delete-user/{id}")
在 delete-user 和 id 之间使用斜杠,然后调用
<a href="/delete-user/${user.id}">x</a>
还要确保 ${user.id} 包含有效的数字值
您应该将 id
添加到 路径 ,因此删除 ?id=
:
<a href="/delete-user${user.id}">x</a>
问题是您混淆了 "query parameter" 和 "path variable"
<a href="/delete-user?id=${user.id}">x</a> // Passing value as query param
@RequestMapping("/delete-user{id}") // Expecting Path variable
要解决此问题,请同时更改为查询参数或路径变量(此处我更改为路径变量):
<a href="/delete-user/${user.id}">x</a>
@RequestMapping("/delete-user/{id}")
public String deleteUser(@PathVariable("id") int id,HttpServletRequest request)
{
request.setAttribute("mode","MODE_HOME");
userService.deleteMyUser(id);
return "welcome";
}
让我向您解释一些 url 和那里的映射
首先 /user/{id}/{userId} 这是路径变量格式 /user?id=1&userid=2 这是 requestparam/query 参数格式。
https://domainname.com/find/user?id=1
@GetMapping("/find/user")
public String deleteUser(@RequestParam("id") int id){
}
https://domainname.com/find/user/1
@GetMapping("/find/user/{id}")
public String deleteUser(@Pathvariable("id") int id){
}
https://domainname.com/find/user/1/2
@GetMapping("/find/user/{id}/{userid}")
public String deleteUser(@Pathvariable("id") int id,@Pathvariable("userId")
int userId){
}
** 如果是路径变量,你的变量是映射的一部分
POST 请求
https://domainname.com/find/user
in request body {"id":1}
@PostMapping("/find/user")
public String deleteUser(@RequestBody Integer id){
}
https://domainname.com/find/user/1?userId=2
@GetMapping("/find/user/{id}")
public String deleteUser(@Pathvariable("id") int id,@RequestParam("userId")
int userId){
}
如果您正在使用 @RequestMapping
,那么它也被推荐定义方法,默认情况下它与 get 请求映射。
@RequestMapping(method = [RequestMethod.GET])
我尝试通过在 url 中获取 ID 来删除用户,但出现错误:
Failed to convert value of type 'java.lang.String' to required type 'int';
nested exception is java.lang.NumberFormatException: For input string:
我将 int id 更改为 String id,但是 deleteMyUser()
将不起作用,因为它接受整数。
代码:
<a href="/delete-user?id=${user.id}">x</a>
@RequestMapping("/delete-user{id}")
public String deleteUser(@PathVariable("id") int id,HttpServletRequest request)
{
request.setAttribute("mode","MODE_HOME");
userService.deleteMyUser(id);
return "welcome";
}
这个怎么样:
RequestMapping("/delete-user/{id}")
在 delete-user 和 id 之间使用斜杠,然后调用
<a href="/delete-user/${user.id}">x</a>
还要确保 ${user.id} 包含有效的数字值
您应该将 id
添加到 路径 ,因此删除 ?id=
:
<a href="/delete-user${user.id}">x</a>
问题是您混淆了 "query parameter" 和 "path variable"
<a href="/delete-user?id=${user.id}">x</a> // Passing value as query param
@RequestMapping("/delete-user{id}") // Expecting Path variable
要解决此问题,请同时更改为查询参数或路径变量(此处我更改为路径变量):
<a href="/delete-user/${user.id}">x</a>
@RequestMapping("/delete-user/{id}")
public String deleteUser(@PathVariable("id") int id,HttpServletRequest request)
{
request.setAttribute("mode","MODE_HOME");
userService.deleteMyUser(id);
return "welcome";
}
让我向您解释一些 url 和那里的映射
首先 /user/{id}/{userId} 这是路径变量格式 /user?id=1&userid=2 这是 requestparam/query 参数格式。
https://domainname.com/find/user?id=1
@GetMapping("/find/user")
public String deleteUser(@RequestParam("id") int id){
}
https://domainname.com/find/user/1
@GetMapping("/find/user/{id}")
public String deleteUser(@Pathvariable("id") int id){
}
https://domainname.com/find/user/1/2
@GetMapping("/find/user/{id}/{userid}")
public String deleteUser(@Pathvariable("id") int id,@Pathvariable("userId")
int userId){
}
** 如果是路径变量,你的变量是映射的一部分
POST 请求
https://domainname.com/find/user
in request body {"id":1}
@PostMapping("/find/user")
public String deleteUser(@RequestBody Integer id){
}
https://domainname.com/find/user/1?userId=2
@GetMapping("/find/user/{id}")
public String deleteUser(@Pathvariable("id") int id,@RequestParam("userId")
int userId){
}
如果您正在使用 @RequestMapping
,那么它也被推荐定义方法,默认情况下它与 get 请求映射。
@RequestMapping(method = [RequestMethod.GET])