web-dev-qa-db-fra.com

Spring Boot - rediriger vers une autre méthode de contrôleur

Je suis très nouveau sur Spring Boot. Je crée une application très basique avec SpringBoot et Thymeleaf. Dans le contrôleur, j'ai 2 méthodes comme suit:

Méthode 1 - Cette méthode affiche toutes les données de la base de données:

  @RequestMapping("/showData")
public String showData(Model model)
{
    model.addAttribute("Data", dataRepo.findAll());
    return "show_data";
}

Méthode 2 - Cette méthode ajoute des données à la base de données:

@RequestMapping(value = "/addData", method = RequestMethod.POST)
public String addData(@Valid Data data, BindingResult bindingResult, Model model) {
    if (bindingResult.hasErrors()) {
        return "add_data";
    }
    model.addAttribute("data", data);
    investmentTypeRepo.save(data);

    return "add_data.html";
}

Des fichiers HTML sont présents correspondant à ces méthodes, c'est-à-dire show_data.html et add_data.html.

Une fois la méthode addData terminée, je souhaite afficher toutes les données de la base de données. Cependant, ce qui précède redirige le code vers la page statique add_data.html et les données nouvellement ajoutées ne s'affichent pas. Je dois en quelque sorte invoquer la méthode showData sur le contrôleur, je dois donc rediriger l'utilisateur vers l'URL/showData. Est-ce possible? Si cela est le cas, comment cela peut-il être fait?

Merci d'avance.

15
Revansha

Essaye ça:

@RequestMapping(value = "/addData", method = RequestMethod.POST)
public String addData(@Valid Data data, BindingResult bindingResult, Model model) {

    //your code

    return "redirect:/showData";
}
29
sparrow

la solution de moineau n'a pas fonctionné pour moi. Il vient de rendre le texte "redirect: /"

J'ai pu le faire fonctionner en ajoutant HttpServletResponse httpResponse À l'en-tête de la méthode du contrôleur.

Puis dans le code, en ajoutant httpResponse.sendRedirect("/"); dans la méthode.

Exemple:

@RequestMapping("/test")
public String test(@RequestParam("testValue") String testValue, HttpServletResponse httpResponse) throws Exception {
    if(testValue == null) {
        httpResponse.sendRedirect("/");
        return null;
    }
    return "<h1>success: " + testValue + "</h1>";
}
5
Gaʀʀʏ

Vous devez renvoyer un code d'état http 3xx à partir de votre demande addData et mettre l'url redirct dans la réponse.

0
niekname