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.

  1. Versucht, mit Hilfe von filtern bezogen auf Lösung auf technowobble
  2. 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>
  3. Aktiviert die SetCharacterEncodingFilter im tomcat -web.xml
  4. Änderte den code zurück ResponseEntity statt String 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

Schreibe einen Kommentar