Spring启动TemplateInputException

时间:2015-03-02 13:33:26

标签: java spring-boot

我正在使用一个简单的项目测试Spring启动,并且我在post方法上有一个TemplateInputException。

这是我的控制器:

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.astrea.annuaire.domain.User;

@Controller
@RequestMapping("/annuaire")
public class AnnuaireController {

    @RequestMapping(method = RequestMethod.GET)
    public String main(Model model) {
        model.addAttribute("user", new User());
        return "connection";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String connection(@ModelAttribute User user, Model model) {
        System.out.println("Connection attempted by " + user.toString());
        return null;
    }

}

这是我的用户类:

public class User {

    private String name;

    private String password;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

这是我的connection.html文件:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head> 
    <title>Connexion</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <form action="#" th:action="@{/annuaire}" th:object="${user}" method="post">
        <input type="text" name="pseudo" th:field="*{name}" placeholder="Nom d'utilisateur" />
        <input type="password" name="pwd" th:field="*{password}" placeholder="Mot de passe" />
        <input type="submit" name="valider" value="Se connecter"/>
    </form>
</body>
</html>

这是我的pom:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.1.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

GET方法(名为main)成功运行,但是当我提交表单时,我发现了这个错误:

org.thymeleaf.exceptions.TemplateInputException: Error resolving template "annuaire", template might not exist or might not be accessible by any of the configured Template Resolvers

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

当你返回null时,Spring会将其解释为&#34;找出我的视图名称&#34;并将请求URL转换为视图。从而POST /annuaire成为&#34; annuaire&#34;和Spring尝试渲染该模板。

所以你需要做一些不同的事情,有几个选择:

  1. 向POST处理程序添加HttpServletResponse参数。 Spring会推断您自己处理了响应,而不是尝试渲染视图。
  2. 返回ResponseEntity<?>以明确处理回复。
  3. 为POST处理程序编写模板并返回其名称。
  4. 返回"redirect:<redirect-url>"重定向。
  5. 最后一个可能最有意义; "redirect:/annuaire"会将浏览器发送回您的表单。