当前位置: 首页 > 知识库问答 >
问题:

使用使用Spring Boot和Thym

呼延靖
2023-03-14

我正在学习Spring Boot,并试图实现身份验证。我有一个注册页面,它使用POST方法发送新用户数据以存储在内存数据库中。奇怪的是,当我提交表单时,GET方法是唯一被调用的方法。这是我的超文本标记语言文件:

<!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>

如您所见,表单上有< code>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")放在@GetMap()方法中,即使我点击注册表单上的提交按钮,也可以在我的服务器上看到该方法被调用。有人知道为什么会发生这种情况吗?

共有1个答案

魏浩广
2023-03-14

在html文件中,“方法”关键字中存在拼写错误将该行替换为:

删除action=“#”,然后它将起作用

 类似资料:
  • 我想把@AutoWired注释变成一个“方面”。我想在我的方面中注入一个存储库,但是当我试图调用autowired类的方法时,出现了NullPointException。 我已经尝试在aspect类上添加,但我出现了同样的错误。 如果我不使用aspect类,而是使用,我可以毫无问题地调用存储库。 一些文档谈到了spring的xml文件配置,但在spring boot,我没有这些文件。 这里是pom

  • 看起来在这个话题上有一些问题,但许多问题现在已经过时,或者问的是不同的问题。 例如,我想做 我不想在 我有一个方法签名,它同时接受请求参数和请求主体(它是Kotlin,但我不认为这实际上有什么不同)。 我可以很好地访问RequestParam,但是RequestBody包含的不仅仅是我在body中发送的JSON,它包含了body和请求参数的合并。在上面的示例中,它将为body绑定输出以下内容 有没

  • 我尝试将Spring Boot与HikariDataSource配合使用,但出现了错误。断管怎么配置比较好还是用c3p0比较好?我正在使用这个配置 我使用: 和 springboot 版本 1.4.2.RELEASE

  • 尝试使用springboot MVC和Thymeleaf访问POST方法中的多个对象。 这是控制器。 下面是这些观点: patient.html 和result.html 和bean类是:PatientDataModel.java 另一个bean: 现在,问题是,我需要这两个bean在GET和POST方法中都可以访问。当我运行代码时,它正在执行,但是bean没有值,所有值都是空的。请建议

  • 本文向大家介绍SpringBoot AOP使用笔记,包括了SpringBoot AOP使用笔记的使用技巧和注意事项,需要的朋友参考一下 1. 启用AOP a. 在类上添加@Aspect注解 b. 注入该类, 可以使用@Component进行注入到Spring容器中 2. 通过PointCut对象创建切入点 a. 在某个方法使用类似下面的方法进行注入 i. 其中,execution表达式为 exec

  • 似乎没有使用Hikaricp。 例如,Spring。数据源。始终影响最大池大小。Spring数据源。希卡里。最大池大小不受影响。 我设定如下: 然后我通过netstat命令检查连接数。有10个连接。似乎hikari的最大池大小不起作用。即使我删除了spring.datasource.maximum池大小,hikari的最大池大小仍然不起作用。 此外,我设置了以下日志事件,但没有关于HikariCP

  • 我试图设置本地DynamoDB实例与SpringBoot。我跟着这个,但是格拉德尔。 当我尝试运行我的应用程序时,会出现以下异常: 我知道这是由于歧义导致的依赖注入失败,但我的是一个无参数构造函数。不确定歧义在哪里。 以下是我的代码: 格雷德尔锉刀 发电机配置 代理(实体) @DynamoDBTable(tableName="Agent")公共类Agent{私有字符串代理号;私有整数id;私有企业