web-dev-qa-db-fra.com

Spring: la requête envoyée par le client était syntaxiquement incorrecte ()

Bonjour, j'ai reçu l'erreur suivante lors de la redirection: 

La requête envoyée par le client était syntaxiquement incorrecte

L'URL indiquée par le navigateur est: localhost:8080/Project/menu/main/home/0 et voici mes classes avec les redirections en premier - "de", en second "à":

 /*
 * 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();
    }
}

Seconde classe:

@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);
    }
}

Résolu : Je l'ai résolu, paramètre en excès dans la méthode de la deuxième classe.

19
Simcha

Dans ce cas, il est très utile que org.springframework.web loggin soit défini sur DEBUG dans log4j configuration

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

Par exemple. Lorsque le paramètre est manquant ou ne peut pas être converti dans le type requis, le journal contiendra des détails sur l'exception.

35
ike3

Dans mon cas, la raison de cette erreur était que le navigateur (Chrome, dans mon cas particulier) envoyait la date à partir du <input type="date" ... /> au serveur dans un format incorrect afin que le serveur ne sache pas comment l'analyser.

2
ivan.mylyanyk

Dans mon cas, c’était aussi un problème de conversion, Spring s’attendait à un entier mais j’entrais dans une chaîne. Essayez de vérifier ce que vous avez passé comme paramètres au contrôleur

0
Youness Marhrani

Comme dit ike3 , l’utilisation du journal détaillé a beaucoup aidé à trouver la solution pour moi. Dans mon cas, il s'agissait d'une incompatibilité entre @PathVariable sans nom spécifié et la variable elle-même.

Quelque chose comme ça:

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

Notez la différence entre "uname" et "nom d'utilisateur"!.

0
antgar9