方法不允许,状态=405,HTML表单使用Thymeleaf



我使用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文档并遵循一些教程来了解它是如何工作的。

相关内容

  • 没有找到相关文章

最新更新