You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot登录表单无法获取用户邮箱输入问题排查

登录表单无法获取邮箱输入的问题

我在Spring Boot应用中实现登录表单,包含邮箱和密码字段,但始终无法获取用户输入的邮箱值。

初始实现代码

表单页面(login-form.html)

<form th:action="@{/login}" method="get" th:object="${loginForm}" style="max-width: 600px; margin: 0 auto;">
    <div class="m-3">
        <div class="form-group row">
            <label class="col-4 col-form-label">E-mail: </label>
            <div class="col-8">
                <input type="text" th:field="*{email}" name="q" class="form-control" required />
            </div>
        </div>

        <div class="form-group row">
            <label class="col-4 col-form-label">Password: </label>
            <div class="col-8">
                <input type="password" th:field="*{password}" class="form-control" required/>
            </div>
        </div>

        <div>
            <button type="submit" class="btn btn-primary">Log in</button>
        </div>
    </div>
</form>

控制器代码

@GetMapping("login")
public ModelAndView login(Model model, @RequestParam(name = "q", required = false) Optional<String> email) {
    Optional<UserDto> aUser;
    System.out.println(email);
    if (email.isPresent()) {
        aUser = userService.getAUserByEmail(email.get());
        model.addAttribute("user", aUser);
        var mv = new ModelAndView("user/user-list", model.asMap());
        return mv;
    } else {
        model.addAttribute("loginForm", new LoginForm());
        return new ModelAndView("/login/login-form", model.asMap());
    }
}

原本以为通过@RequestParam(name = "q")和HTML中的name="q"可以获取邮箱值,但控制台始终输出Optional.empty。


修改后的代码

根据建议调整实现方式后,仍然无法获取用户输入的邮箱值:

修改后的控制器代码

@GetMapping("login")
public ModelAndView login(Model model, LoginForm loginForm) {
    Optional<UserDto> aUser;
    if (loginForm.getEmail() != null) {
        aUser = userService.getAUserByEmail(loginForm.getEmail());
        model.addAttribute("user", aUser);
        var mv = new ModelAndView("user/user-list", model.asMap());
        return mv;
    } else {
        model.addAttribute("loginForm", new LoginForm());
        return new ModelAndView("/login/login-form", model.asMap());
    }
}

修改后的表单页面(login-form.html)

<form th:action="@{/login}" method="get" th:object="${loginForm}" style="max-width: 600px; margin: 0 auto;">
    <div class="m-3">
        <div class="form-group row">
            <label class="col-4 col-form-label">E-mail: </label>
            <div class="col-8">
                <input type="text" th:field="*{email}" class="form-control" required />
            </div>
        </div>

        <div class="form-group row">
            <label class="col-4 col-form-label">Password: </label>
            <div class="col-8">
                <input type="password" th:field="*{password}" class="form-control" required/>
            </div>
        </div>

        <div>
            <button type="submit" class="btn btn-primary">Log in</button>
        </div>
    </div>
</form>

LoginForm实体类代码

@Data
@AllArgsConstructor
@NoArgsConstructor
public class LoginForm {
    private String email;
    private String password;
}

请问问题出在哪里?


内容的提问来源于stack exchange,提问作者one-hand-octopus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:25:22