我正在使用 Java、Spring 和 Thymeleaf 构建我的第一个 Web 应用程序。当我为登录表单发出 PutRequest 时,我收到以下错误消息:
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' is not supported]
为什么我收到不支持 PUT 的消息?
我已经将
spring.mvc.hiddenmethod.filter.enabled=true
添加到 application.properties
登录网页
<html lang="en" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layouts/layoutDefault}">
<body>
<div layout:fragment="content">
<div class="container py-5 text-center">
<form th:action="login" th:method="put" th:object="${loginForm}">
<div class="purple_text mb-4">
<h2>login</h2>
</div>
<div class="mb-3">
<input th:field="*{email}" name="email" autocomplete="off" autofocus="" class="form-control mx-auto w-auto" placeholder="E-mail" type="text">
</div>
<div class="mb-3">
<input th:field="*{password}" name="password" autocomplete="off" class="form-control mx-auto w-auto" placeholder="Password" type="password">
</div>
<button class="btn btn-primary submit_button" type="submit">Login</button>
</form>
</div>
</div>
</body>
控制器
@PutMapping( "/login-user")
public String userLogin(@ModelAttribute("loginForm") Model model) {
String email = (String) model.getAttribute("email");
String password = (String) model.getAttribute("password");
new StringFormattedMessage("email: %s\npassword: %s", email, password);
boolean isValidLogin = appUserService.loginUser(email, password);
if (isValidLogin){
return "index";
}
else {
return "register";
}
}
服务
public Boolean loginUser(String email, String password){
Optional<AppUser> optionalAppUser = appUserRepository.findByEmailEqualsIgnoreCase(email);
if (optionalAppUser.isPresent()) {
AppUser appUserToLogin = optionalAppUser.get();
String hashOfPassword = createHash(password);
if(hashOfPassword.equals(appUserToLogin.getPassword())) {
return true;
}
else {
return false;
}
}
else {
throw new IllegalStateException("Email doesn't exists!");
}
我希望有人可以帮助我并指出正确的方向来解决菜鸟错误。
问候马丁
在 html 中你有
th:action="login"
但在你的控制器中你有 @PutMapping( "/login-user")
。它们应该匹配 th:action="@{/login}"
& @PutMapping( "/login")
或 th:action="@{/login-user}"
& @PutMapping( "/login-user")
注意 html 表单操作中缺少的
@ & {}