Nesne Jackson kullanılarak (de) serileştirildiğinde bir Java nesnesinin içine ham JSON eklemeye çalışıyorum. Bu işlevi test etmek için aşağıdaki testi yazdım:
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);
}
Kod, aşağıdaki satırı verir:
{"foo":"one","bar":{"A":false}}
JSON, işlerin tam olarak nasıl görünmesini istediğim. Ne yazık ki kod, JSON'u nesneye geri okumaya çalışırken bir istisna ile başarısız oluyor. İşte istisna:
org.codehaus.jackson.map.JsonMappingException: [Kaynak: java.io.StringReader@d70d7a; satır: 1, sütun: 13] (referans zinciri aracılığıyla: com.tnal.prism.cobalt.gather.testing.Pojo ["bar"])
Jackson neden bir yönde gayet iyi işliyor ama diğer yöne giderken başarısız oluyor? Görünüşe göre kendi çıktısını tekrar girdi olarak alabilmelidir. Yapmaya çalıştığım şeyin alışılmışın dışında olduğunu biliyorum (genel tavsiye, bar
adlandırılmış bir özelliğe sahip bunun için bir iç nesne yaratmaktır A
), ancak bu JSON ile hiç etkileşimde bulunmak istemiyorum. Kodum bu kod için bir geçiş işlevi görüyor - Bu JSON'u alıp hiçbir şeye dokunmadan tekrar göndermek istiyorum, çünkü JSON değiştiğinde kodumun değişikliklere ihtiyaç duymasını istemiyorum.
Tavsiye için teşekkürler.
DÜZENLEME: Pojo'yu statik bir sınıf yaptı, bu da farklı bir hataya neden oluyordu.