Ich versuche, einige bestimmte Parameter von RequestMapping
Methoden aufzulösen, um Werte aus dem Anfragetext zu extrahieren und zu validieren und in bestimmte annotierte Parameter einzufügen.
Das größte Problem ist, dass ich feststelle, dass HttpServletRequest
(get from NativeWebRequest
) den Eingabestream nicht lesen kann (einige Parameter sind im Anfragetext enthalten) mehr als einmal . Wie kann ich Inputstream
/ Reader
oder den Anfragetext mehr als einmal abrufen?
Sie können einen Filter hinzufügen, den aktuellen HttpServletRequest
abfangen und in eine benutzerdefinierte HttpServletRequestWrapper
umbrechen. In Ihrem benutzerdefinierten HttpServletRequestWrapper
lesen Sie den Anfragetext und cachen ihn und implementieren dann getInputStream
und getReader
, um vom zwischengespeicherten Wert zu lesen. Da nach dem Umbrechen der Anforderung der zwischengespeicherte Wert immer vorhanden ist, können Sie den Anforderungshauptteil mehrmals lesen:
Nach diesem Filter wird jedem wrappedRequest
angezeigt, das mehrere Male gelesen werden kann:
Um MultipleReadHttpRequest
zu implementieren, können Sie sich ContentCachingRequestWrapper
vom Spring-Framework, das im Grunde dasselbe tut.
Dieser Ansatz hat seine eigenen Nachteile. Zunächst ist es etwas ineffizient, da der Anfragetext für jede Anfrage mindestens zweimal gelesen wird. Der andere wichtige Nachteil ist, wenn Ihr Anfragetext 10 GB
Wert des Streams enthält, lesen Sie diese 10 GB
Daten und noch schlimmer bringen Sie diese in den Speicher für weitere Untersuchungen.
Tags und Links java spring spring-mvc