2017-02-17 3 views
2

Ich habe ein Problem mit einem einfachen Jaxrs (Jersey) Endpunkt:Jersey + Jackson - Körper json Stringliteral Flucht

@POST 
@Consumes("application/json") 
@Produces("application/json") 
@Path("/test") 
public String doSomething(String s) { 
... 
} 

Immer, wenn ich Postbote verwenden Sie es mit einem einfachen Nutzlast zu testen, wie "test_string", Jackson entkommt führende und nachfolgende doppelte Anführungszeichen. Ich lande dann mit "\"test_string\"" in Java.

Soweit ich weiß, ist die "test_string" als JSON String Literal gültig. Wenn ich einfach test_string (kein Anführungszeichen) sende, funktioniert es gut. Jedoch senden meine Clients wohlgeformte JSON-Zeichenfolgen ("test_string")

Wie kann ich Jackson sagen, meine Literale zu akzeptieren?

Antwort

0

Sie werden zwei Möglichkeiten:

1: Sie Ihre eigenen Wrapper-Klasse erstellen und setzen ist als Parameter

public class TestMapper{ 
@JsonProperty 
public String s; 
} 

2: ohne Jackson:

JSONObject jsonObj = new JSONObject(s); 
String result=(String) jsonObj.get("test_string"); 
0

ich davon aus, dass ich Sie haben Jersey nicht so konfiguriert, dass die Anfrage automatisch mit Jackson gemappt wird, und ich sehe nicht, dass Sie ObjectMapper verwenden, um JSON in dem von Ihnen bereitgestellten Code zu analysieren. Die Anfrage wird als String empfangen und Jersey löscht die Zitate, um sie zu einer gültigen Java-Zeichenfolge zu machen. Um dies zu vermeiden, verwenden Sie ObjectMapper, um die Zeichenfolge als String.class zu analysieren.

Verwandte Themen