Wenn die URL, auf die zugegriffen werden soll, und die von Spring empfangene Anforderungs-URL unterschiedlich sind, können Sie selbst mit FlashAttribute keine Parameter an das Umleitungsziel übergeben! !!
Angenommen, Sie haben einen Proxy erstellt, um eine Anforderung für "domain / ~" in "domain / hoge / ~" zu ändern. Ich bin sicher, es sieht so aus: Küssen: (angemessen)
nginx.conf
location / {
proxy_pass http://tomcat:8080/hoge/;
}
Als ich addFlashAttribute von RedirectAttributes ausführte, stieß ich dabei auf eine Situation, in der es nicht am Umleitungsziel zugeordnet wurde. Vielleicht so etwas: kissing_heart: (passender)
HogeController.java
@RequestMapping(value="/hoge/save", method = RequestMethod.POST)
public String save(@ModelAttribute("form") HogeForm form, RedirectAttributes redirectAttributes) {
:
:
redirectAttributes.addFlashAttribute("form", form);
return "redirect:/complete";
}
@RequestMapping(value="/hoge/complete", method = RequestMethod.GET)
public String complete(@ModelAttribute("form") HogeForm form) {
log.info(form); //leer! !!
return "hoge.html";
}
Sie können sich FlashAttribute leisten! Das Problem, das kurz vor meinem Gedanken auftrat. Ich habe aus der umgekehrten Proxy-Richtung nachgeforscht, aber ich kenne die Ursache überhaupt nicht. .. ..
:thinking: :thinking: :expressionless: :sleepy: :sleeping:
: desktop: "Wenn Umleitungsattribute nicht funktionieren, können Sie FlashMap direkt verwenden."
Was für eine Empörung! Wenn ich mir die Implementierungsmethode beim Nachdenken anschaue, rufe ich eine Methode namens setTargetRequestPath auf. .. ..
: hashed: ... Ziel ... Pass?
Was passierte war, dass der FlashMap-Wert nicht gebunden war, weil der umgeleitete Pfad (/ complete
) und der umgeleitete Pfad ( / hoge / complete
) nicht übereinstimmten! !!
Mit dieser Art von Änderung können Parameter an das Umleitungsziel übergeben werden, selbst wenn der Reverse-Proxy festgelegt ist.
AbstractController.java
protected String redirect(String path, Map<String,Object> attributeMap) {
//Interner Pfad(@RequestMapping(value)Der Wert der)
String innerPath = "/hoge" + path;
//Füllen Sie FlashMap nach
FlashMap flashMap = new FlashMap();
attributeMap.forEach(flashMap::put);
//Setzen Sie das FlashMap-Ziel auf den internen Pfad
flashMap.setTargetRequestPath(innerPath);
//FlashMap eingestellt
RequestContextUtils.getFlashMapManager(request).saveOutputFlashMap(flashMap, request, response);
//Das Umleitungsziel ist ein externer Pfad(Zugriff über den Browser)
return "redirect:" + path;
}
HogeController.java
@RequestMapping(value="/hoge/save", method = RequestMethod.POST)
public String save(@ModelAttribute("form") HogeForm form) {
:
:
return redirect("/complete", Map.of("form", form));
}
Selbst wenn Sie das Umschreiben verwenden und der interne Pfad und der externe Pfad nicht einfach wie diesmal ersetzt werden können, ist das Prinzip dasselbe. Geben Sie also Ihr Bestes ** und geben Sie den internen Pfad und den externen Pfad an.
FlashMap wurde im folgenden Artikel leicht verständlich geschrieben. Ich wollte es früher finden. .. .. : unschuldig: Übergeben Sie den Wert an das Umleitungsziel, ohne Umleitungsattribute in Spring MVC zu verwenden
Recommended Posts