Ich versuche, unformatiertes JSON in ein Java-Objekt aufzunehmen, wenn das Objekt mit Jackson (de) serialisiert wird. Um diese Funktionalität zu testen, habe ich folgenden Test geschrieben:
public static class Pojo {
public String foo;
@JsonRawValue
public String bar;
}
@Test
public void test() throws JsonGenerationException, JsonMappingException, IOException {
String foo = "one";
String bar = "{\"A\":false}";
Pojo pojo = new Pojo();
pojo.foo = foo;
pojo.bar = bar;
String json = "{\"foo\":\"" + foo + "\",\"bar\":" + bar + "}";
ObjectMapper objectMapper = new ObjectMapper();
String output = objectMapper.writeValueAsString(pojo);
System.out.println(output);
assertEquals(json, output);
Pojo deserialized = objectMapper.readValue(output, Pojo.class);
assertEquals(foo, deserialized.foo);
assertEquals(bar, deserialized.bar);
}
Der Code gibt die folgende Zeile aus:
{"foo":"one","bar":{"A":false}}
Mit dem JSON möchte ich genau, dass die Dinge aussehen. Leider schlägt der Code mit einer Ausnahme fehl, wenn versucht wird, den JSON wieder in das Objekt einzulesen. Hier ist die Ausnahme:
org.codehaus.jackson.map.JsonMappingException: Instanz von java.lang.String kann nicht aus dem START_OBJECT-Token unter [Quelle: java.io.StringReader@d70d7a; Zeile: 1, Spalte: 13] (durch Referenzkette: com.tnal.prism.cobalt.gather.testing.Pojo ["bar"])
Warum funktioniert Jackson in einer Richtung gut, scheitert aber in der anderen Richtung? Es scheint, dass es in der Lage sein sollte, seine eigene Ausgabe wieder als Eingabe zu verwenden. Ich weiß, was ich versuche, ist unorthodox (der allgemeine Rat ist, ein inneres Objekt zu erstellen, für bar
das eine Eigenschaft namens benannt ist A
), aber ich möchte überhaupt nicht mit diesem JSON interagieren. Mein Code fungiert als Durchgang für diesen Code. Ich möchte diesen JSON aufnehmen und erneut senden, ohne etwas zu berühren, da ich bei Änderungen des JSON nicht möchte, dass mein Code geändert werden muss.
Danke für den Hinweis.
BEARBEITEN: Pojo wurde zu einer statischen Klasse gemacht, die einen anderen Fehler verursachte.