Подтвердить что ты не робот

Spring: запрос, отправленный клиентом, был синтаксически неправильным()

Привет, я получил следующую ошибку во время перенаправления:

Запрос, отправленный клиентом, был синтаксически неправильным

URL, который показывает браузер: localhost:8080/Project/menu/main/home/0, и здесь мои классы с переадресацией сначала - "от", второй "до":

 /*
 * Get all possible values of menu and generate correct url to pages controllers
 * 
 */

@Controller
@SessionAttributes("menu")
public class MainMenuController {


    @ModelAttribute
    public Menu createMenu() {
        return new Menu();
    }

    @RequestMapping(value = "/menu", method = RequestMethod.GET)
    public String mainMenuResolver(@ModelAttribute Menu menu) {
        menu.setMainMenu("first");
        return "forward:/menu/first";
    }

    @RequestMapping(value = "/menu/{mainMenu}", method = RequestMethod.GET)
    public String subMenuResolver(@PathVariable String mainMenu, @ModelAttribute Menu menu) {
        menu.setMainMenu(mainMenu);
        menu.setSubMenu("home");
        return "forward:/menu/first/home";
    }

    @RequestMapping(value = "/menu/{mainMenu}/{subMenu}", method = RequestMethod.GET)
    public String secMenuResolver(@PathVariable String mainMenu, @PathVariable String subMenu, @ModelAttribute Menu menu) {
        menu.setMainMenu(mainMenu);
        menu.setSubMenu(subMenu);
        menu.setSecMenu("0");

        if (menu.getMainMenu().equals("first")){
            return "redirect:/menu/main/"+menu.getSubMenu()+"/"+menu.getSecMenu();
        }

        if (menu.getMainMenu().equals("second")){
            return "redirect:/menu/religion/"+menu.getSubMenu()+"/"+menu.getSecMenu();
        }

        return "redirect:/menu/main/"+menu.getSubMenu()+"/"+menu.getSecMenu();
    }
}

Второй класс:

@Controller
@SessionAttributes("menu")
public class FirstPageController {

    @ModelAttribute
    public Menu createMenu() {
        return new Menu();
    }

    @RequestMapping(value = "/menu/main/{subMenu}/{secMenu}", method = RequestMethod.GET)
    public ModelAndView menuResolver(@PathVariable String mainMenu, @PathVariable String subMenu,@PathVariable String secMenu, @ModelAttribute("menu") Menu menu) {
        menu.setMainMenu(mainMenu);
        menu.setSubMenu(subMenu);
        menu.setSecMenu(secMenu);       

        if (menu.getSubMenu().equals("home")){
            String title = "Project - Home Page";
            return new ModelAndView("MainPage", "title", title);
        }

        String title = "Project - Home Page";
        return new ModelAndView("MainPage", "title", title);
    }
}

Решено: я решил, что в методе второго класса есть лишний параметр.

4b9b3361

Ответ 1

В таких случаях очень полезно установить org.springframework.web уровень loggin на DEBUG в log4j configuration

<logger name="org.springframework.web">
    <level value="DEBUG" />
    ...
</logger>

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

Ответ 2

В моем случае причина этой ошибки заключалась в том, что браузер (Chrome в моем конкретном случае) отправлял date из <input type="date" ... /> на сервер в неправильном формате, поэтому сервер не знал, как его анализировать.

Ответ 3

Как сказано ike3, использование подробного журнала помогло мне найти решение. В моем случае это было несоответствие между @PathVariable без указанного имени и самой переменной.

Что-то вроде этого:

@RequestMapping("/user/{uname}")
public String doSomething(@PathVariable String username) { ...

Обратите внимание на разницу между "uname" и "username"! Было внутреннее исключение, которое не было поднято, и я не мог его увидеть, пока не установил журнал на уровень INFO.

Ответ 4

В моем случае это также была проблема преобразования, Spring ожидал Integer, однако я входил в String. Попробуйте проверить, что вы передали в качестве параметров контроллеру