Anmelden

View Full Version : Webservice per SQL abfragen



Seiten : 1 [2]

Fuerchau
19-02-18, 17:08
Warum kannst du das Ergebnis des "Select .. from Json..." nicht direkt mit
insert into MyTable
Select ... from Json...
speichern und dabei das Zielfeld der Tabelle als NVARCHAR oder gleich die Json-Tabelle mit
"Name" nvarchar(40)

laden?

KM
20-02-18, 12:06
Ich hab das Problem nun gefunden. Und zwar hatte ich in meinem REST-Webservice, den ich mit der Java-Referenzimplementierung "Jersey" erstellt hatte, bei der "Produces"-Annotation folgendes angegeben:


@Produces({MediaType.APPLICATION_JSON , MediaType.APPLICATION_XML})

Ich bin hier davon ausgegangen, dass die Daten standardmäßig in UTF-8 zur Verfügung gestellt werden. In den Log-Files, die ich davor geschrieben hatte, waren die Daten zumindest noch UTF-8. Jetzt hab ich herausgefunden, dass man bei dieser Annotation das Charset explizit angeben muss. Das sieht dann so aus:


@Produces({MediaType.APPLICATION_JSON + "; charset=UTF-8", MediaType.APPLICATION_XML + "; charset=UTF-8"})

Damit passt nun alles und die Daten werden wie gewünscht in UTF-8 geliefert.

Trotzdem Danke für Eure Bemühungen!!!

Gruß,
KM

mihael
04-11-22, 06:41
Ich weiss, dass ich hiermit viel zu spät dran bin (ein paar Jahre zu spät), aber für alle anderen, die auf dieses Thema treffen, könnte das hier helfen.

Das Problem hier lag höchstwahrscheinlich nicht am Web Service, sondern am Client. Der Client hat zwar mitgeteilt, dass er die Daten als JSON haben will, aber nicht in welcher Kodierung.

Zur Erklärung: Man gibt per HTTP Header mit in welchem Format man die Daten gern hätte. Ob das der Web Service dann wirklich tut, liegt am Web Service. Manche Frameworks setzen das automatisch richtig um und manche ignorieren es komplett (da "bestellt" man JSON und bekommt XML z. B.).

Wie in welchem Format man die Daten gerne hätte gibt man mit dem "Accept" HTTP Header an. Beispiel: Accept: application/json

Hier hat man jetzt aber noch nicht die Kodierung angegeben (Codepage/CCSID). Wenn man die Daten in UTF-8 haben will, dann gibt man das mit dem Attribut "charset" an.

Accept: application/json;charset=utf8

Note: Der HTTP Header "Content-Type" gibt nicht an, in welchem Format man die Daten vom Server gerne hätte, sondern in welchem Format die Daten sind, die man zum Server hin sendet (z. B. bei einer POST Anfrage).