Frühjahr Controller @ResponseBody text/xml-Antwort UTF-8-encoding Problem
Habe ich annotation-basierte Spring-Rest-Service läuft auf der jetty-web-server(tomcat).Der controller-code ist :
@RequestMapping(method = RequestMethod.POST, value = { "/ssrfeed/exec/",
"/query/exec" }, consumes = { "application/xml", "text/xml",
"application/x-www-form-urlencoded" }, produces = {
"application/xml;charset=UTF-8", "text/xml;charset=UTF-8",
"application/x-www-form-urlencoded;charset=UTF-8" })
@ResponseBody
protected String getXmlFeed(HttpServletRequest request,
@PathVariable String serviceName, @RequestBody String xmlReq) {
//code....
return appXMLResponse;
}
Das problem ist, dass die xml-Antwort zurückgegeben Controller enthält einige Zeichen wie ä ö ü (Umlaute). Die Antwort bei der Ausgabe auf dem browser gibt dem parsing-Fehler :
XML Parsing Error: not well-formed
Location: //localhost:8083/MySerice/ssrfeed/exec/
Line Number 18111, Column 17:
<FIRST_NAME>Tzee rfista</FIRST_NAME>
----------------^
(ein kleines Dreieck erscheint statt ü)
The expected is : <FIRST_NAME>Tzeeürfista</FIRST_NAME>
Habe ich versucht, eine unter-Lösungen, aber Problem ist immer noch da.
- Versucht, mit Hilfe von filtern bezogen auf Lösung auf technowobble
- bestanden charset StringHttpMessageConverter Eigenschaft
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes" value="application/json" /> </bean> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes" value="text/xml;charset=UTF-8" /> </bean> </list> </property> </bean>
- Aktiviert die
SetCharacterEncodingFilter
im tomcat -web.xml - Änderte den code zurück
ResponseEntity
stattString
und entfernt@ResponseBody
.protected ResponseEntity<String> getXmlFeed(HttpServletRequest request, @PathVariable String serviceName, @RequestBody String xmlReq) { //line of code HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.add("Content-Type", "application/xml; charset=utf-8"); return new ResponseEntity<String>(appXMLResponse, responseHeaders, HttpStatus.CREATED); }
Dem 4. Lösung funktioniert, Aber das wird vorhandener code kann ich nicht ändern, Signatur der Methode, wie es vielleicht Auswirkungen auf die vorhandenen Kunden von diesem service. Irgendwelche Ideen/Zeiger um dieses Problem zu lösen ?
InformationsquelleAutor SurjanSRawat | 2014-12-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
in Ihrem dispatcher-servlet-context-xml, die Sie haben, um eine propertie. z.B.
Ich aktualisierte code-Teil können Sie versuchen, mit dieser Einfachen Erklärung von StringHttpMessageConverter bean ist nicht genug, versuchen Sie Spritzen es in AnnotationMethodHandlerAdapter, Spring MVC 3.1 Sie können die Verwendung des MVC-namespace
Ich habe versucht, das snippet oben, aber Problem ist immer noch da.
InformationsquelleAutor Ashok
Endlich das Problem behoben ist. Hier ist, was ich Tat.
1. Verwendet StringHttpMessageConverter ist constructer für die Einstellung charset :
Auch ich entfernte die unnötige spring3.0 und 3.1, die Gläser von meinem Projekt. Diese wurden nicht benötigt, aber waren, die dort Lagen. (sollte schon früher gemacht).
Dies löste das problem für mich.
InformationsquelleAutor SurjanSRawat
Gibt es keine solche Antwort mit dem, was ich entschieden habe meine encoding-problem, also werde ich es posten.
Habe ich Frühjahr RestService läuft, auf dem Anlegesteg. Bei der Antwort der Körper-Teil Daten, die empfangen wurde, aus der Datenbank korrekt in UTF-8-Codierung, aber die Daten aus .property-Datei (mit Fehler-und Erfolgsmeldungen) hatte eine falsche Codierung und war wie äöü...
Zuerst habe ich überprüft Codierung .property-Datei selbst mit Datei->Einstellungen->Editor->Code-Stil-> Datei-Codierungen (in solcher Weise könnten Sie nicht nur überprüfen, sondern die Codierung, die Sie brauchen) - es war UTF-8.
Dann setze ich antwortcodierung @RequestMapping in meinem RestController:
und setzen defaultCharset-Eigenschaft für Jackson2:
Kein Ergebnis.
Aber dann habe ich festgestellt, dass das problem gelöst werden könnte durch das hinzufügen von UTF-8-Codierung
PropertyPlaceholderConfigurer wer packt die Daten von meinem .property-Datei:
... und das problem ist verschwunden )))
InformationsquelleAutor Andrei Kazhanenka