我使用thyymleaf制作了一个表单,但遇到了这个问题。我读了很多文章,但没有找到任何解决办法。
你有什么建议吗?
项目负责人->
@Controller
public class Controllers {
@GetMapping("/home")
public ModelAndView home(){
System.out.println("User is in Homepage");
return new ModelAndView("index");
}
@GetMapping("/service")
public ModelAndView service(){
System.out.println("User is in Service Page");
return new ModelAndView("service");
}
@GetMapping("/about")
public ModelAndView about(){
System.out.println("User is in About page");
return new ModelAndView("about");
}
这是提交表单的控制器类->
@Controller
public class SavingUser{
@Autowired
private UserRepository userRepository;
@PostMapping("/registerUser")
public ModelAndView user(@ModelAttribute Customer customer, ModelMap model){
System.out.println("User in registration page..");
userRepository.save(customer);
model.addAttribute("saveUser", customer);
return new ModelAndView("index");
}
}
这是我的HTML表单-
<div id="form">
<form action="registerUser" th:action="@{/registerUser}" th:object="${saveUser}" method="POST">
<br />
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
<label for="name">Your Name:</label><br />
<input type="text" th:field="*{name}" placeholder="" /><br />
<label for="suburb">Your Suburb</label><br />
<input type="text" th:field="*{suburb}" placeholder="" /><br />
<input class="submit" type="submit" value="Submit" />
<br /><br />
</div>
</form>
</div>
我试图删除action=">
嗯,从我在代码中看到的情况来看,您错过了控制器中的@GetMapping方法来实际显示页面。不太清楚你在哪一步获得405身份。如果您还从控制台添加相关的异常消息,这将是有用的。
编辑:要回答最初的问题,你会得到405因为在Post Controller中你向"/services"发出Post请求不存在(只有服务的GET存在)
@PostMapping("/registerUser")
public ModelAndView user(@Valid @ModelAttribute Customer customer, BindingResult result, ModelMap model){
[...]
return new ModelAndView("service"); // this makes a POST to "service" endpoint!
}
要纠正这个错误,您必须像这样重定向到页面:
@PostMapping("/registerUser")
public ModelAndView user(@Valid @ModelAttribute Customer customer, BindingResult result, ModelMap model){
[...]
return new ModelAndView("redirect:/service"); // this makes a GET to "service" endpoint
}
撇开这一点不谈,还有很多事情可以改进。首先,你没有在你的项目中使用Thymeleaf。没有百里香标记将被处理。要使用它,必须首先添加依赖项,然后将Thymeleaf配置为HTML解析器。这里详细说明了正确的方法。
另外,我强烈建议阅读Thymeleaf文档并遵循一些教程来了解它是如何工作的。