org.springframework.web.HttpRequestMethodNotSupportedException Метод запроса «POST» не поддерживается

#java #spring #spring-boot #spring-mvc #web-applications

Вопрос:

Я пытаюсь забронировать столик. Но когда я нажимаю кнопку «Таблица книг», я получаю ошибку. Ошибка в том, что метод запроса «POST» не поддерживается. Я делал это раньше в других подобных проектах, это сработало. Я думаю, что проблема в HTML-файле, но я не смог его найти. Как я могу Это исправить? Вот мой класс сущностей

 @Entity
@Table(name = "reservation")
public class Reservation {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "arrival_date")
    private String arrivalDate;

    @Column(name = "arrival_time")
    private String arrivalTime;

    @Column(name = "num_of_person")
    private String numOfPerson;

    @Column(name = "first_name")
    private String firstName;

    @Column(name = "email")
    private String email;

    @Column(name = "phone_number")
    private String phoneNumber;
 

Вот мой класс контроллера

 @Controller
public class RestaurantController {

    @Autowired
    private ReservationService reservationService;
    
    @InitBinder
    public void init(WebDataBinder binder) {
        StringTrimmerEditor editor = new StringTrimmerEditor(true);
        binder.registerCustomEditor(StringTrimmerEditor.class, editor);
    }
    
    @GetMapping("/")
    public String home() {
        return "index";
    }
    
    @GetMapping("/reservation")
    public String reservation(Model model) {
        model.addAttribute("newRes", new Reservation());
        return "reservation";
        
    }
    
    @PostMapping("/save-reservation")
    public String proceed(@Valid @ModelAttribute("newRes") Reservation reservation, BindingResult result, Model model) {
        reservationService.saveReservation(reservation);
        return "redirect:/reservation";
        
    }
}

 

А вот мой HTML-файл

 <form id="contactForm" th:action="@{/save-reservation}" th:object="${newRes}" method="post" >
    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
    <div class="row">
        <div class="col-md-6">
            <h3>Book a table</h3>
            <div class="col-md-12">
                <div class="form-group">
                    <input id="input_date" class="datepicker picker__input form-control" th:field="*{arrivalDate}" type="text" value="" equired data-error="Please enter Date">
                    <div class="help-block with-errors"></div>
                </div>
            </div>
            <div class="col-md-12">
                <div class="form-group">
                    <input id="input_time" class="time form-control picker__input" th:field="*{arrivalTime}" required data-error="Please enter time">
                    <div class="help-block with-errors"></div>
                </div>
            </div>
            <div class="col-md-12">
                <div class="form-group">
                    <select class="custom-select d-block form-control" id="person" th:field="*{numOfPerson}" required data-error="Please select Person">
                        <option  value="0">Select Person*</option>
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                    </select>
                    <div class="help-block with-errors"></div>
                </div>
            </div>
        </div>
        <div class="col-md-6">
            <h3>Contact Details</h3>
            <div class="col-md-12">
                <div class="form-group">
                    <input type="text" class="form-control" id="name" th:field="*{firstName}" placeholder="Your Name" required data-error="Boş Bırakılamaz">
                    <div class="help-block with-errors"></div>
                </div>
            </div>
            <div class="col-md-12">
                <div class="form-group">
                    <input type="text" placeholder="Your Email" id="email" class="form-control" th:field="*{email}" required data-error="Boş Bırakılamaz">
                    <div class="help-block with-errors"></div>
                </div>
            </div>
            <div class="col-md-12">
                <div class="form-group">
                    <input type="text" placeholder="Your Numbar" id="phone" class="form-control" th:field="*{phoneNumber}" required data-error="Boş Bırakılamaz">
                    <div class="help-block with-errors"></div>
                </div>
            </div>
        </div>
        <div class="col-md-12">
            <div class="submit-button text-center">
                <button class="btn btn-common" id="submit" type="submit">Book Table</button>
 

Комментарии:

1. Пожалуйста, добавьте ошибку/трассировку стека в свой вопрос.

2. Ошибка в том, что метод запроса «POST» не поддерживается.

3. Это не ответ на мой вопрос. Пожалуйста, добавьте полную ошибку и/ или трассировку к вашему вопросу. Это всего лишь фрагмент (первая строка или около того).

4. ты имеешь в виду вот так? Когда я нажимаю кнопку «Таблица книг». w.s.m.s.DefaultHandlerExceptionResolver : Решен [org.springframework.web.httprequestметодно не поддерживается Исключение: Метод запроса «POST» не поддерживается]

Ответ №1:

Ваша реализация верна. попробуйте перезагрузить maven или очистить свой кэш

Комментарии:

1. все еще не работает. Я не понимаю. Я сделал еще несколько подобных проектов, и все они сработали. Я не понимаю, почему это не работает.

Ответ №2:

добавьте эту зависимость в свой pom.xml… Я запустил ваш код в своей системе. Он работает нормально, скорее всего, страница, которую вы получаете, находится в кэше.Используйте эту зависимость, она не позволяет хранить какие-либо значения в кэше.

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
</dependency>
 

Комментарии:

1. все равно не работает. Я использовал те же методы в другом проекте, и это сработало. Я не понимаю, почему это не работает

2. хорошо, давайте проверим, что кэширование меняет это reservetaion.html назовите какой-нибудь ресурс и попробуйте..я скопировал тот же код, что и вы, и я получаю правильный вывод

3. Одна вещь, которую я забыл вам сказать, я удалил @Valid из сопоставления сообщений. это единственное изменение, которое я внес в ваш код.

4. ни один мужчина не остался прежним. похоже, я не могу это исправить.

5. Можете ли вы поделиться трассировкой стека ошибок со своего терминала/консоли ide