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);
}
}
Решено: я решил, что в методе второго класса есть лишний параметр.
Ответы
Ответ 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. Попробуйте проверить, что вы передали в качестве параметров контроллеру