使用Thymleaf和spring遇到了org.springframework.web.method.annotation.MethodArgumentTypeMismatchException

时间:2019-03-22 14:26:10

标签: spring-boot spring-mvc thymeleaf

我正在运行一个与Thymleaf集成的springboot演示,但是它不断抛出以下异常:

  

WARN 25302 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver:已解决   [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException:   无法将类型“ java.lang.String”的值转换为必需的类型   'java.lang.Long';嵌套的异常是java.lang.NumberFormatException:   对于输入字符串:“ form.html”] **

控制器

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired 
    private UserRepository userRepository;
    private List<User> getUserlist() {
        return userRepository.listUser();
    }

    @GetMapping
    public ModelAndView list(Model model) {
        model.addAttribute("userList", getUserlist());
        model.addAttribute("title", "user management");
        return new ModelAndView("users/list", "userModel", model);
    }

    @GetMapping("/form")
    public ModelAndView createForm(Model model) {
        User user=new User();
        user=userRepository.saveOrUpateUser(user);
        model.addAttribute("user", user);
        model.addAttribute("title", "create user");
        return new ModelAndView("users/form", "userModel", model);
    }

list.html:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
    <meta charset="UTF-8">
    <title th:text="${userModel.title}">welcome</title>
</head>
<body>
<div th:replace="~{fragments/header :: header}">...</div>
<h3 th:text="${userModel.title}">Welcome to baidu.com</h3>
<div>
    <a href="/users/form.html">create user</a>
</div>
<table border="1">
    <thead>
    <tr>
        <td>ID</td>
        <td>Age</td>
        <td>Name</td>
    </tr>
    </thead>
    <tbody>
    <tr th:if="${userModel.userList.size()} eq 0">
        <td colspan="3">no user info!!</td>
    </tr>
    <tr th:each="user : ${userModel.userList}">
        <td th:text="${user.id}">1</td>
        <td th:text="${user.age}">11</td>
        <td><a href="view.html" th:href="@{'/users/' + ${user.id}}"
               th:text="${user.name}">waylau</a></td>
    </tr>
    </tbody>
</table>
<div th:replace="~{fragments/footer :: footer}">...</div>
</body>
</html>

form.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
    <meta charset="UTF-8">
    <title th:text="${userModel.title}">users : View</title>
</head>s
<body>
<div th:replace="~{fragments/header :: header}">...</div>
<h3 th:text="${userModel.title}">Welcome to baidu.com</h3>
<div>
    <a href="/users">back to home</a>
</div>
<form action="/users" method="POST" th:object="${userModel.user}">
    <input type="hidden" name="id" th:value="*{id}">
    名称:<br>
    <input type="text" name="name" th:value="*{name}">
    <br>
    年龄:<br>
    <input type="text" name="age" th:value="*{age}">
    <input type="submit" value="提交">
</form>
<div th:replace="~{fragments/footer :: footer}">...</div>
</body>
</html>

 User.java
    import javax.xml.bind.annotation.XmlRootElement;


@XmlRootElement // mediatype 转为xml
public class User {

    private long id; // 用户的唯一标识
    private String name;
    private int age;

    public User() {
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    ....getter and setter
}

在首页上,一切正常,除了 create user 锚点,锚点应返回要填写的表格。

有什么主意吗?

0 个答案:

没有答案