提问者:小点点

无法将“java. lang.String”类型的值转换为所需类型“java.lang.Integer”;


在我将分页添加到我的Web应用程序后,现在我希望通过添加搜索栏(按名称)来过滤数据。

这是错误:

Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer';
 nested exception is java.lang.NumberFormatException: For input string: "{pageNumber}" 
 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: "{pageNumber}"

这是我的控制器中的方法:

@GetMapping(value = "/medecin/{pageNumber}")
    public String list(@PathVariable Integer pageNumber, Model model,
                       @RequestParam(name = "size", defaultValue = "4") int size,
                       @RequestParam(name = "keyWord", defaultValue = "") String keyWord) {

        Page<Medecin> page ;

        if (keyWord==null)
             page = medecinRepository.findAll(PageRequest.of(pageNumber - 1, size));
        else
             page = medecinRepository.findByNomContains(keyWord, PageRequest.of(pageNumber - 1, size));

        List<Medecin> medecinList = page.getContent();

        long totalItems = page.getTotalElements();

        int totalPages =  page.getTotalPages();


        model.addAttribute("list", medecinList);
        model.addAttribute("totalItems", totalItems);
        model.addAttribute("totalPages", totalPages);
        model.addAttribute("pageNumber", pageNumber);

        return "medecin/list";
    }

这是我的超文本标记语言文件的一部分:

<form th:action="@{/medecin/{pageNumber}}">
        <button type="submit" class="btn btn-primary">CHERCHER</button>
        <input type="text" name="keyWord" th:value="${keyWord}">
</form>

我想注意到,当替换

考虑到搜索后的结果可能不止一页,我不得不修复它。


共3个答案

匿名用户

我认为问题在于如何构造th: action属性。您这样做的方式是传递文字{pageNumber}而不是它的解析值。

正确的方法可能是:

<form th:action="@{/medecin/{path}(path=${pageNumber})}">

有关更多解释,请参阅此线程:Thymeleaf构造URL变量

匿名用户

试试这个。添加@PathVariable("pageNumber")

    public String list(@PathVariable("pageNumber") Integer pageNumber, Model model,

如果这不起作用,请尝试使pageNumber int而不是Integer。

匿名用户

你有两个选择

首先将值为pageNumber的变量分配给名为pageNumber的路径变量

<form th:action="@{/medecin/{pageNumber}(pageNumber = ${pageNumber})}">
        <button type="submit" class="btn btn-primary">CHERCHER</button>
        <input type="text" name="keyWord" th:value="${keyWord}">
</form>

第二个,您可以在双引号内创建一个带有单引号的字符串,以生成一个带有名为pageNumber参数的路径

<form th:action="@{'/medecin/' + ${pageNumber}}">
        <button type="submit" class="btn btn-primary">CHERCHER</button>
        <input type="text" name="keyWord" th:value="${keyWord}">
</form>