Reputation: 454
I try to delete a user by getting id in url with an error:
Failed to convert value of type 'java.lang.String' to required type 'int';
nested exception is java.lang.NumberFormatException: For input string:
I change int id to String id, but then deleteMyUser()
will not work because it accepts an integer.
Code:
<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";
}
Upvotes: 3
Views: 6485
Reputation: 229
Let me explain you some urls and there mapping
First /user/{id}/{userId} this is path variable format /user?id=1&userid=2 this is requestparam/query param format.
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){
}
** in case of pathvariable your variable are part of mapping
POST request
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){
}
if you are using @RequestMapping
then its recommanded to define method also by default it map with get request.
@RequestMapping(method = [RequestMethod.GET])
Upvotes: 1
Reputation: 61
The problem is you are confusing between "query parameter" and "path variable"
<a href="/delete-user?id=${user.id}">x</a> // Passing value as query param
@RequestMapping("/delete-user{id}") // Expecting Path variable
To Fix this, either change both to query param or path variable (here I changed to 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";
}
Upvotes: 1
Reputation: 58774
You should add the id
to path, so remove ?id=
:
<a href="/delete-user${user.id}">x</a>
Upvotes: 1
Reputation: 435
What about this:
RequestMapping("/delete-user/{id}")
Use a slash between delete-user and id and then call
<a href="/delete-user/${user.id}">x</a>
Also ensure that ${user.id} contains a valid number value
Upvotes: 0