Ich habe in meiner Annotation-gesteuerten Spring MVC Java-Webanwendung auf dem Jetty-Webserver ausgeführt (derzeit im Maven Jetty-Plugin).
Ich versuche, AJAX-Unterstützung mit einer Controller-Methode durchzuführen, die nur String-Hilfetext zurückgibt. Die Ressourcen sind in UTF-8-Codierung, ebenso wie die Zeichenfolge, aber meine Antwort vom Server kommt mit
content-encoding: text/plain;charset=ISO-8859-1
auch wenn mein browser sendet
Accept-Charset windows-1250,utf-8;q=0.7,*;q=0.7
Ich verwende irgendwie die Standardkonfiguration der Feder
Ich habe einen Hinweis gefunden, um diese Bean zur Konfiguration hinzuzufügen, aber ich denke, sie wird einfach nicht verwendet, da sie besagt, dass sie die Codierung nicht unterstützt und stattdessen eine Standardcodierung verwendet wird.
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/plain;charset=UTF-8" />
</bean>
Mein Controller-Code lautet (beachten Sie, dass diese Änderung des Antworttyps bei mir nicht funktioniert):
@RequestMapping(value = "ajax/gethelp")
public @ResponseBody String handleGetHelp(Locale loc, String code, HttpServletResponse response) {
log.debug("Getting help for code: " + code);
response.setContentType("text/plain;charset=UTF-8");
String help = messageSource.getMessage(code, null, loc);
log.debug("Help is: " + help);
return help;
}
DispatcherServlet
's config (...-servlet.xml
)Ich habe eine Lösung für Spring 3.1 gefunden. mit der Verwendung der @ ResponseBody-Annotation. Hier ist ein Beispiel für einen Controller mit Json-Ausgabe:
quelle
<mvc:annotation-driven/>
in applicationContext gewechselt war . (Statt<bean class=" [...] DefaultAnnotationHandlerMapping"/>
, was im Frühjahr 3.2 sowieso veraltet ist ...)produces
Attributs ändern .MediaType.APPLICATION_JSON_UTF8_VALUE
.Beachten Sie, dass Sie in Spring MVC 3.1 den MVC-Namespace verwenden können, um Nachrichtenkonverter zu konfigurieren:
Oder codebasierte Konfiguration:
quelle
Accept-Charset
Header verschmutzt wird, der wahrscheinlich jede bekannte Zeichenkodierung auflistet, und 2) wenn die Anfrage einenAccept
Header hat, diesupportedMediaTypes
Eigenschaft des Konverters nicht verwendet wird , also zum Beispiel, wenn ich die Anfrage tippe direkt die URL in einem Browser die Antwort hatContent-Type: text/html
stattdessen einen Header.<bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="UTF-8" /></bean>
Nur für den Fall, dass Sie die Codierung auch folgendermaßen einstellen können:
Ich denke, StringHttpMessageConverter ist besser als dies.
quelle
the manifest may not be valid or the file could not be opened.
in IE 11 erhalten. Danke digz!Sie können "RequestMapping" = = "text / plain; charset = UTF-8" hinzufügen
Weitere Informationen finden Sie in diesem Blog
quelle
Ich habe kürzlich gegen dieses Problem gekämpft und in Frühjahr 3.1 eine viel bessere Antwort gefunden:
So einfach wie JAX-RS, genau wie in allen Kommentaren angegeben, dass es sein könnte / sollte.
quelle
produces
sagt: "... Anfrage nur zugeordnet, wenn der Inhaltstyp einem dieser Medientypen entspricht." Dies bedeutet AFAIK, dass dieproduces
Frage relevant ist, ob die Methode mit einer Anforderung übereinstimmt und nicht, welchen Inhaltstyp die Antwort haben sollte.Mithilfe von Erzeugnissen können Sie den Typ der Antwort angeben, die Sie vom Controller senden. Dieses Schlüsselwort "produziert" ist bei Ajax-Anfragen am nützlichsten und war in meinem Projekt sehr hilfreich
quelle
Dank digz6666 funktioniert Ihre Lösung für mich mit geringfügigen Änderungen, da ich json verwende:
Die Antwort von axtavt (die Sie empfohlen haben) funktioniert bei mir nicht. Auch wenn ich den richtigen Medientyp hinzugefügt habe:
quelle
Ich habe den Inhaltstyp in der MarshallingView in der ContentNegotiatingViewResolver- Bean festgelegt. Es funktioniert einfach, sauber und reibungslos:
quelle
Ich verwende den CharacterEncodingFilter, der in web.xml konfiguriert ist. Vielleicht hilft das.
quelle
forceEncoding=true
wird auch die Antwort gefiltert, aber in diesem Fall würde es nicht helfen.forceEncoding=false
. Ich habe es gerade eingestelltfalse
und "charset = UTF-8" wurde erfolgreich zumContent-Type
Header hinzugefügt .Wenn keiner der oben genannten Punkte für Sie funktioniert hat und Sie versuchen, Ajax-Anfragen für "POST" und nicht für "GET" zu stellen, hat das für mich gut funktioniert ... keiner der oben genannten Punkte hat funktioniert. Ich habe auch den Charakter EncodingFilter.
quelle
Nachdem ich viele Problemumgehungen für dieses Problem ausprobiert habe, habe ich mir das ausgedacht und es funktioniert einwandfrei.
quelle
Die einfache Möglichkeit, dieses Problem in Spring 3.1.1 zu lösen, besteht darin, folgende Konfigurationscodes hinzuzufügen
servlet-context.xml
Sie müssen nichts überschreiben oder implementieren.
quelle
Wenn Sie dieses Problem durch die folgende Konfiguration beheben möchten:
Sie sollten bestätigen, dass in Ihrer gesamten * .xml-Datei nur ein mvc: annotation-gesteuertes Tag vorhanden sein sollte. Andernfalls ist die Konfiguration möglicherweise nicht wirksam.
quelle
Gemäß dem Link "Wenn keine Zeichenkodierung angegeben ist, erfordert die Servlet-Spezifikation die Verwendung einer Kodierung nach ISO-8859-1". Wenn Sie Spring 3.1 oder höher verwenden, verwenden Sie die folgende Konfiguration, um charset = UTF-8 auf zu setzen Antworttext
@RequestMapping (value = "Ihre Zuordnungs-URL", erzeugt = "text / plain; charset = UTF-8")
quelle
Beispielkonfiguration:
quelle