MethodArgumentTypeMismatchException при весенней загрузке - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь удалить пользователя, получив идентификатор в URL с ошибкой:

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";

    }

Ответы [ 4 ]

0 голосов
/ 19 декабря 2018

Позвольте мне объяснить вам некоторые URL-адреса и их отображение

First / user / {id} / {userId} это формат переменной пути / user? Id = 1 & userid = 2 это формат requestparam / query param.

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){   

}

** в случае переменной пути ваша переменная является частью отображения

после запроса

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])

0 голосов
/ 19 декабря 2018

Вы должны добавить id к пути , поэтому удалите ?id=:

<a href="/delete-user${user.id}">x</a>
0 голосов
/ 19 декабря 2018

Проблема в том, что вы путаете между «параметром запроса» и «переменной пути»

<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";

    }
0 голосов
/ 19 декабря 2018

Как насчет этого:

 RequestMapping("/delete-user/{id}")

Используйте косую черту между delete-user и id, а затем вызовите

<a href="/delete-user/${user.id}">x</a>

Также убедитесь, что $ {user.id} содержит действительное числозначение

...