spring boot MVC falsch codierten POST-Anforderung
Kann ich nicht machen, request-Kodierung, um korrekt zu arbeiten. Für die Codierung zu arbeiten, habe ich Hinzugefügt, filter, Feder, Sicherheit:
@Bean
public CharacterEncodingFilter characterEncodingFilter() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
filter.setForceEncoding(true);
return filter;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(characterEncodingFilter(), CsrfFilter.class);
...
}
Hinzufügen von meta-zu meinen Seiten:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
...
Hinzufügen UriEnconding zu tomcat 8:
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
connectionTimeout="20000"
redirectPort="8443" />
Aber es reagiert nicht auf keine von Ihnen. Wenn ich eine Anfrage zu senden und zu Debuggen, ist das Ergebnis falsch ist. Wenn ich zum Beispiel senden بای
als Teil der request form, ich erhalte باÛ
als Ergebnis. Ist da ein Teil in der config, die ich bin fehlt?
Beim senden Nutzlast ajax request (mit rest-client und ofcors zu einer anderen Methode) es arbeitet korrekt, aber kein Glück mit der Formular-Daten. Mein controller sieht so aus:
@RequestMapping(value = "/test1")
@ResponseBody
public String test1(@RequestBody String req) {
return req;
}
@RequestMapping(value = "/test2")
@ResponseBody
public String test2(@RequestParam("search") String req) {
return req;
}
anders versucht:
- für test1 mit
Content-Type=application/json
es richtig, erhält der parameter. - für test2 mit
Content-Type=application/x-www-form-urlencoded
- und get-Methode, funktioniert wieder alles Super. - für test2 mit
Content-Type=application/x-www-form-urlencoded
- und POST-Methode, es gibt falsche kodierte Werte.
Scheint es das problem mit der POST-Methode nur. irgendwelche Vorschläge?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach dem Graben in vielen filter-Ketten und verschieben-Zeichen-Codierung in Ihnen, endlich das problem gefunden. Ein weiterer filter war das ändern der Codierung, bevor der Zeichenkodierung kick in.
Bekomme ich nur den filter von spring security die hand, und fügen Sie es manuell, um eine Bohne zu tun, die Filterung für mich:
2 Tage und suchen und versuchen und nur eine einfache Antwort. Was ein harter Weg, eine Antwort zu finden
- - - - UPDATE---
Wenn du mit spring boot 1.2+, es gibt keine Notwendigkeit für CharacterEncoding überhaupt. es ist in seiner perfekten position standardmäßig mit Zeichenkodierung gleich utf8. Also Nächstes mal nur Attribute setzen, wenn es irgendwelche gibt! die Eigenschaften festgelegt sind:
---UPDATE 2---
Vom Tomcat wiki: In
Tomcat 8
ab Version 8.0.0 (8.0.0-RC3, um genau zu sein), wird der StandardwertURIEncoding
Attribut auf das element hängt davon ab, "strenge servlet-compliance" - Einstellung. Der default-Wert (strenge compliance ist aus) URIEncoding ist jetztUTF-8
. Wenn "strict-servlet-compliance" aktiviert ist, wird der default-Wert istISO-8859-1
.so allgemein sagen, es gibt keine Notwendigkeit, um den UriEncoding in der Tomcat-Config-neigter.
CharacterEncodingFilter
standardmäßig aktiviert, mit den default -UTF-8
. Siehe github.com/spring-projects/spring-boot/wiki/...