不支持 PutRequest [当禁用 spring 隐藏方法时]

问题描述 投票:0回答:1

我正在使用 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!");
        }

我希望有人可以帮助我并指出正确的方向来解决菜鸟错误。

问候马丁

java spring spring-boot spring-thymeleaf
1个回答
0
投票

在 html 中你有

th:action="login"
但在你的控制器中你有
@PutMapping( "/login-user")
。它们应该匹配
th:action="@{/login}"
&
@PutMapping( "/login")
th:action="@{/login-user}"
&
@PutMapping( "/login-user")

注意 html 表单操作中缺少的

@ & {}

© www.soinside.com 2019 - 2024. All rights reserved.