Spring MVC Метод запроса 'POST' не поддерживается -> HTTP 405 - PullRequest
1 голос
/ 11 апреля 2020

Застрял на ~ 4 часа, размышляя, где ошибка в приложении Spring MVC / thymeleaf.
Моя локальная цель - сделать администратора. html после отправки формы входа / пропуска на домашней странице.

Контроллер:

@Controller
public class HomeController {
        @GetMapping("/")
        public String getHome(Model m) {
            m.addAttribute( "user",new User());
            return "/home";
        }
        @PostMapping("/")
        public String getSubmit(@ModelAttribute User user){

            return "/admin";
        }
}

home. html:

  <form action="#" th:action="@{/admin}" th:object="${user}" method="post">
            <p class="txt">Name: <input type="text" th:field="*{name}"/></p>
            <p class="txt">Password: <input type="text" th:field="*{password}"/></p>
            <p><input class="button" type="submit" value="Submit" />
                <input class="button" type="reset" value="Reset" /></p>
        </form >

Класс пользователя:

@Data
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String name;
    private String password;
    private boolean isAdmin;
    private String address;
}

Итак, я нашел множество идей в Google, убрал защиту пружин из pom. xml,
попытался использовать @RequestedMapping с RequestMethod. PUT, - нет, это не работает.

Ответы [ 2 ]

2 голосов
/ 11 апреля 2020

Ваша форма ссылается th:action="@{/admin}" как цель. Ваш контроллер не отображает /admin, но только root /.

Вы должны изменить свою цель на /.

Если вы хотите визуализировать шаблон /admin тогда ваше возвращение верное. Если вы хотите перенаправить на /admin, чтобы новый контроллер мог справиться с этим, вы должны вместо этого написать redirect:/admin.

1 голос
/ 11 апреля 2020

Ваш контроллер должен быть таким:

@Controller
public class HomeController {
    @GetMapping("/")
    public String getHome(Model m) {
        m.addAttribute("user", new User());
        return "/home";
    }

    @PostMapping("/admin")
    public String getSubmit(User user) {   
        return "/admin";
    }
}

home. html должно быть похоже:

<form action="@{/admin}" th:object="${user}" method="post">
    <p class="txt">Name: <input type="text" th:field="*{name}"/></p>
    <p class="txt">Password: <input type="text" th:field="*{password}"/></p>
    <p><input class="button" type="submit" value="Submit" />
    <input class="button" type="reset" value="Reset"/></p>
</form >
...