Wie set encoding in RESTeasy auf UTF-8?
Ich habe ein problem mit der Kodierung von Zeichenfolgen in RESTeasy. Das problem ist, dass die chinesischen alphabet oder anderen nicht-lateinischen Zeichen werden nicht richtig angezeigt. Wenn ich versuche, drucken Sie Sie aus (oder senden Sie als Antwort) bekomme ich "?????" statt.
Ich glaube, dass die Standard-Kodierung in RESTeasy ist us-ascii. Wissen Sie, wie es zu ändern auf UTF-8? Vielleicht gibt es eine andere Lösung für dieses problem?
Hier ist eine kurze passage aus meinem code:
@POST
@Path("post")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public String uploadData(@MultipartForm DataUploadForm uploadForm) {
...
//the code below is just for the purpose of presentation
String text = "some non-latin alphabet signs here"
System.out.println(text); //"??????" is printed out
return text; //"??????" is returned
}
Meine resteasy-jaxrs-3.0-beta-2 läuft auf Tomcat 7.0.
Danke!
- Sollte es einen
@Produces
Anmerkungen über? (Es könnte auch in der Klasse.) - Danke, ich werde es versuchen, aber ich Frage mich, ob diese Anmerkung beeinflusst, was in der Methode (vor dem erzeugen der Ausgabe)? In anderen Worten, kann es System.aus.println Anzeige richtige Zeichen?
- Wenn die
System.out.println()
Codierung ist Ihre einzige wirkliche problem ist, dann benötigen Sie grundsätzlich, um ihn zu konfigurieren in der Seite des einen verantwortlich für die Präsentation der Ausgabe auf stdout. Wenn es zum Beispiel Eclipse, dann den Kopf auf diese Antwort: stackoverflow.com/questions/13452324/... Beachten Sie, dass dies nichts zu tun mit Tomcat/Servlets/JAX-RS/RESTeasy.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nicht etwa resteasy oder jax-rs mate.
Überprüfen dieser Beitrag
Gibt es mehrere Dinge, die Sie wollen, zu schauen:
Konfigurationen.
Für die Menschen, die hierher kommen, weil der Titel von der Frage, hier ist eine Lösung. Der @Consumes-annotation, setzen Sie den Zeichensatz auf UTF-8:
Ich hatte das gleiche problem Migration jaxrs1 (jersey) zu resteasy 3.0.17.endgültig.
Beim Upload-Formular/mehrteilig aus einer benutzerdefinierten client, der client hat senden Sie ein content-Typ, aber kein charset und dann resteasy meint "us-ascii" (gemäß der MIME-RFC, nach den docs). Komisch ist, dass, wenn kein content-type bei allen gegeben ist, resteasy übernimmt "text/plain; charset=ISO-8859-1" (nach http-Spezifikation, nehme ich an?).
Ihre docs vorschlagen, um dieses Problem zu lösen mit einem RestEasy benutzerdefinierten interceptor:
https://docs.jboss.org/resteasy/docs/3.0.2.Final/userguide/html/Multipart.html#multipart_overwrite_content_type
Aber dieser interceptor ist eigentlich veraltet und es wirbt für die Nutzung der jaxrs 2.0 interceptor-Mechanismus.
Lange Geschichte kurz, um es an die Arbeit in einer Implementierung-unabhängige Weise erstellen Sie diese Klasse:
Als Nächstes fügen Sie den interceptor web.xml:
<context-param>
<param-name>resteasy.providers</param-name>
<param-value>
x.y.z.RestEasyDefaultCharsetInterceptor
</param-value>
</context-param>
Jetzt verstehe ich nicht den gesamten Mechanismus noch nicht, aber Sie sollte auch in der Lage sein, das problem zu beheben auf der client-Seite durch die Angabe des charset-parameter des content-type.
Erstellte ich einen webfilter. Ich weiß nicht, ob es ist der beste Weg, es zu tun, aber für sicher, dass es das Problem behoben.
Ändern Sie einfach die urlPatterns so kann es filtern Sie Ihre Resteasy Ressourcen.