객체가 Jackson을 사용하여 (비) 직렬화 될 때 Java 객체 내에 원시 JSON을 포함하려고합니다. 이 기능을 테스트하기 위해 다음 테스트를 작성했습니다.
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);
}
코드는 다음 줄을 출력합니다.
{"foo":"one","bar":{"A":false}}
JSON은 내가 원하는 모습 그대로입니다. 불행히도 JSON을 객체로 다시 읽으려고 할 때 코드가 예외와 함께 실패합니다. 다음은 예외입니다.
org.codehaus.jackson.map.JsonMappingException : [출처 : java.io.StringReader@d70d7a; 줄 : 1, 열 : 13] (참조 체인을 통해 : com.tnal.prism.cobalt.gather.testing.Pojo [ "bar"])
Jackson이 한 방향으로 잘 작동하지만 다른 방향으로 갈 때 실패하는 이유는 무엇입니까? 다시 입력으로 자체 출력을 취할 수 있어야 할 것 같습니다. 내가하려는 것이 비 정통적이라는 것을 알고 있지만 (일반적인 조언은 bar
라는 속성을 가진 내부 개체를 만드는 것입니다 A
),이 JSON과 전혀 상호 작용하고 싶지 않습니다. 내 코드는이 코드에 대한 패스 스루 역할을합니다. JSON이 변경 될 때 코드를 수정할 필요가 없기 때문에이 JSON을 가져 와서 아무것도 건드리지 않고 다시 보내고 싶습니다.
충고 감사합니다.
편집 : Pojo를 정적 클래스로 만들어 다른 오류를 발생 시켰습니다.