Как исправить «org.springframework.web.HttpRequestMethodNotSupportedException: метод запроса« POST »не поддерживается?» - PullRequest
0 голосов
/ 02 января 2019

Таким образом, я получаю предупреждение как

 WARN  [org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver] (default task-2) Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported] 

, когда я перехожу на следующий URL http://localhost:8080/ProjectFE/uregistration, и на веб-сайте отображается

HTTP 405 Метод не разрешен

вот мой код контроллера:

package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import model.daoimpl.UserinfoDaoImpl;
import model.dao.IUserinfoDAO;
import model.entity.Userinfo;

@Controller
public class RegistrationController {
    @RequestMapping(value="/registration",method = RequestMethod.GET)
    public String addRegistrationPage() {
        return "registrationpage";
    }
    @RequestMapping(value="/uregistration",method = RequestMethod.POST)
    public String addURegistrationPage(@ModelAttribute("User")Userinfo u) {
        IUserinfoDAO iu = new UserinfoDaoImpl();
        boolean b = iu.insertInfo(u);
        if(b)
            return "success";
        else
            return "registrationpage";
    }

}

Так что мне делать?Также, если потребуется какой-либо другой код, пожалуйста, прокомментируйте, я отредактирую сообщение, спасибо.

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Поскольку ваше сопоставление обработчика GET равно /registration, измените сопоставление обработчика POST на то же значение:

@RequestMapping(value = "/registration", method = RequestMethod.POST)
0 голосов
/ 13 апреля 2019

Я решил свою проблему, просто добавив конфигурации csrf, как указано в документации по Spring, при отправке ajax-запроса на сервер. Помните, что весной csrf включен по умолчанию, и вам нужно либо отключить его (плохо), либо включить его. Ссылка здесь

https://docs.spring.io/spring-security/site/docs/5.0.x/reference/html/csrf.html

Итак, я добавил <meta name="_csrf" th:content="${_csrf.token}" /> <meta name="_csrf_header" th:content="${_csrf.headerName}" />

<script type="application/x-javascript">
   (function () {
       var token = $("meta[name='_csrf']").attr("content");
       var header = $("meta[name='_csrf_header']").attr("content");
       $(document).ajaxSend(function(e, xhr, options) {
          xhr.setRequestHeader(header, token);
       });
   });
</script>

к моей голове html и внутри формы, которую я отправляю, я включил этот небольшой скрытый ввод, и мой работал для меня. Надеюсь, это поможет вам.

<input type="hidden" th:name="${_csrf.parameterName}"
                        th:value="${_csrf.token}" />
0 голосов
/ 02 января 2019

Проблема с аннотацией @Controller внутри вашего кода. измените его на @RestController, и он должен начать работать. Вот пример кода, который я создал, и он хорошо работает:

package com.sample;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@RestController
public class Sample {
@RequestMapping(value="/registration",method = RequestMethod.GET)
public String addRegistrationPage() {
    return "registrationpage";
}
@RequestMapping(value="/uregistration",method = RequestMethod.POST)
public String addURegistrationPage(@RequestBody String u) {

    boolean b = true;
    if (b)
        return "success";
    else
        return "registra";
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...