请求方法' GET'不支持Thymeleaf的Spring Booth

时间:2018-01-11 05:42:27

标签: spring spring-boot thymeleaf

我正在使用Spring boot,Jpa和Thymeleaf构建一个非常简单的crud应用程序,但我仍然坚持使用" Request方法' GET'不支持"问题。每当我想访问/ add页面时,我都会收到此错误,我可以通过该页面添加新学生。与此错误相关的代码段如下:

Thymeleaf形式:

<h1>Form</h1>
<form action="#" th:action="@{/add}" th:object="${addStudent}" 
   method="post">
    <p>Full name: <input type="text" th:field="*{fname}" /></p>
    <p>Major: <input type="text" th:field="*{major}" /></p>

    <p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>

Controller addNewStudentMethod

@PostMapping("/add")
public String addNewStudent( @ModelAttribute StudentEntity studentEntity, Model model) {

    model.addAttribute("addStudent",studentRepository.save(studentEntity) );
    return "/allstudents";
}

我得到的错误:

There was an unexpected error (type=Method Not Allowed, status=405).
Request method 'GET' not supported

谢谢,

3 个答案:

答案 0 :(得分:2)

在您的控制器中,您只有一个已映射到POST请求&#34; / add&#34;的方法。您必须将GET请求映射到其他方法,或将@PostMapping("/add")更改为@RequestMapping("/add")

请注意:

@PostMapping仅用于映射POST请求。 @GetMapping仅用于映射GET请求。 @RequestMapping映射所有请求类型

答案 1 :(得分:1)

将您的Controller方法的@PostMapping("/any-url")更改为@GetMapping("/any-url")@RequestMapping("/any-url")

简单来说,将上面控制器的方法更改为

@RequestMapping("/add")
public String addNewStudent( @ModelAttribute StudentEntity studentEntity, Model model) {

    model.addAttribute("addStudent",studentRepository.save(studentEntity) );
    return "/allstudents";
}

答案 2 :(得分:1)

您对如何设置它有一些问题。你可能想要的是:

@GetMapping("/add")
public String addNewStudent(Model model) {

    model.addAttribute("studentEntity", new StudentEntity()); //create a new bean so that your form can bind the input fields to it
    return "add"; //let's say add.html this is the name of your form
}

@PostMapping("/add")
public String addNewStudent( @ModelAttribute StudentEntity studentEntity, Model model) {

  //call any service methods to do any processing here
  studentRepository.save(studentEntity);
  return "redirect:/allstudents";  //this would be your confirmation page
}

您的add.html表单会包含以下内容:

<form th:object="${studentEntity}" th:action="@{/add}" method="post" action="allstudents.html">
<!-- input fields here --->
</form>

请注意,th:object是您在@GetMapping方法中添加到模型中的内容。