Сопоставление загрузки Sprint с параметром не найдено

#java #spring #spring-boot

#java #весна #spring-boot

Вопрос:

Итак, я пытаюсь создать веб-приложение Java с использованием Springboot и Thymeleaf. Всякий раз, когда я пытаюсь выполнить поиск, я перенаправляюсь на страницу ошибки, потому что я получаю 404 Not Found.

Форма, которую я использую:

 <form method="get" th:action="@{/searchBusDP}">
    <p class="mb-3">
        <label for="departurePlace" class="col-form-label">Departure place</label>
        <input type="text" id="departurePlace" name="departurePlace" placeholder="Departure place" class="form-control col-sm-5">
        <!--<span th:if="${error ne null}" th:text="${error}" class="text-danger"></span>-->
    </p>
    <p>
        <input type="submit" value="Search bus" class="btn btn-primary">
    </p>
</form>`
 

Мой код контроллера:

 @GetMapping("/searchBus")
public String searchBus() {
    System.out.println("Ik ben in de search");
    return "search-bus";
}

@GetMapping("/searchBusDP")
public String searchBusDP(@RequestParam(name = "departureName") String departurePlace, Model model) {
    try {
        System.out.println("I'm in search DP");
        Iterable<Bus> busses = busService.findAllBussesByDeparturePlace(departurePlace);
        model.addAttribute("busses", busses);
    } catch (IllegalArgumentException exc){
        model.addAttribute("error", exc.getMessage());
    }
    return "search-bus";
}
 

Сообщение об ошибке, которое я получаю в IntelliJ:

 Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'departureName' is not present]
 

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

1. когда вы выполняете вызов get, как вы передаете departureName параметр? В вашей форме thymeleaf вы не задаете этот параметр

Ответ №1:

Имя параметра RequestParam в методе searchBusDP написано неправильно, оно должно быть departurePlace, но это departureName .

Это должно это исправить:

 @RequestParam(name = "departurePlace") String departurePlace
 

Ответ №2:

На странице html ваш тип ввода называется departurePlace, а в контроллере, который вы вызываете, другим именем try

 @GetMapping("/searchBusDP")
public String searchBusDP(@RequestParam(name = "departurePlace ") String departurePlace , Model model) {
    try {
        System.out.println("I'm in search DP");
        Iterable<Bus> busses = busService.findAllBussesByDeparturePlace(departurePlace);
        model.addAttribute("busses", busses);
    } catch (IllegalArgumentException exc){
        model.addAttribute("error", exc.getMessage());
    }
    return "search-bus";
}