【发布时间】:2020-11-09 21:01:37
【问题描述】:
我正在学习 Spring Boot 并尝试实现身份验证。我有一个注册页面,它使用 POST 方法发送新的用户数据以存储在内存数据库中。正在发生的奇怪事情是,当我提交表单时,GET 方法是唯一被调用的方法。这是我的 HTML 文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Signup</title>
</head>
<body>
<div class="container justify-content-center w-25 p-3" style="background-color: #eeeeee; margin-top: 5em;">
<div class="form-group">
<label><a th:href="@{/login}">Back to Login</a></label>
</div>
<h1 class="display-5">Sign Up</h1>
<form action="#" th:action="@{/signup}" methond="POST">
<div id="success-msg" th:if="${signupSuccess}">
You successfully signed up! Please continue to the <a id="login-ling" th:href="@{/login}">login</a> page.
</div>
<div if="error-msg" th:if="${signupError}">
<span th:text="${signupError}"></span>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="inputFirstName">First Name</label>
<input type="input" name="firstName" class="form-control" id="inputFirstName" placeholder="Enter First Name" maxlength="20" required>
</div>
<div class="form-group col-md-6">
<label for="inputLastName">Last Name</label>
<input type="input" name="lastName" class="form-control" id="inputLastName" placeholder="Enter Last Name" maxlength="20" required>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="inputUsername">Username</label>
<input type="input" name="username" class="form-control" id="inputUsername" placeholder="Enter Username" maxlength="20" required>
</div>
<div class="form-group col-md-6">
<label for="inputPassword">Password</label>
<input type="password" name="password" class="form-control" id="inputPassword" placeholder="Enter Password" maxlength="20" required>
</div>
</div>
<button id="submit-button" type="submit" class="btn btn-primary">Sign Up</button>
</form>
</div>
</body>
</html>
如您所见,我在表单上有 method="POST" 属性。
这是我的注册控制器:
import com.udacity.mvc.Basics.models.User;
import com.udacity.mvc.Basics.services.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller()
@RequestMapping("/signup")
public class SignupController {
private final UserService userService;
public SignupController(UserService userService) {
this.userService = userService;
}
@GetMapping()
public String signupView() {
System.out.println("Get");
return "signup";
}
@PostMapping()
public String signupUser(@ModelAttribute User user, Model model) {
String signupError = null;
System.out.println("Post");
if (!userService.usUsernameAvailable(user.getUsername())) {
signupError = "The username already exist.";
}
if (signupError == null) {
int rowsAdded = userService.createUser(user);
if(rowsAdded < 0) {
signupError = "There was an error signing you up. Please try again";
}
}
if (signupError == null) {
model.addAttribute("signupSuccess", true);
} else {
model.addAttribute("signupError", signupError);
}
return"signup";
}
}
我已将System.out.println("GET") 放在@GetMapping() 方法中,并且可以在我的服务器上看到该方法被调用,即使我点击了注册表单上的提交按钮。有人知道为什么会这样吗?
【问题讨论】:
-
你有
methond="POST"。 -
很棒的收获。谢谢一百万
标签: java spring spring-boot spring-security thymeleaf