我正在使用Jackson Mapper对象将对象编组为JSON。它工作得很好但有时我需要包含一些特定的JSON,它不是要被编组的对象的属性。如果我创建一个像“extraJSON”这样的String属性并将JSON内容放在那里,当该对象被编组时,extraJSON将被转义,因此最终成为JSON中的某种JSON。 我已经尝试创建类型为JsonObject(Java 8 JSON)的属性,但没有正确编组。
关于如何解决这个问题的任何想法?到目前为止,我正在使用Local类(我在运行中创建并使用“Object”类型属性),这是有效的,但这是一个丑陋的解决方法。
答案 0 :(得分:0)
这是一个非常基本的例子,使用@JsonRawValue将类成员编组为JSON而不是包含转义JSON字符串的属性。不知道是否适用于您的场景,但希望它有所帮助。
package com.spring.jackson.rawjson;
import static org.junit.Assert.assertEquals;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRawValue;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
public class RawJsonTest {
public static class PojoWithRawJsonMember {
private final String member1;
private final String member2;
private final String rawJsonMember1;
public PojoWithRawJsonMember(String member1, String member2, String rawJsonMember1) {
this.member1 = member1;
this.member2 = member2;
this.rawJsonMember1 = rawJsonMember1;
}
@JsonProperty("member1")
public String getMember1() {
return member1;
}
@JsonProperty("member2")
public String getMember2() {
return member2;
}
@JsonRawValue
public String getRawJsonMember1() {
return rawJsonMember1;
}
}
@Test
public void jsonRaw_shouldMarshalRawJson() throws Exception {
ObjectMapper mapper = new ObjectMapper();
PojoWithRawJsonMember thingToMarshal = new PojoWithRawJsonMember("value1", "value2", "{\"key\":\"value\"}");
String marshalled = mapper.writeValueAsString(thingToMarshal);
assertEquals("{\"rawJsonMember1\":{\"key\":\"value\"},\"member1\":\"value1\",\"member2\":\"value2\"}",
marshalled);
}
}
@JsonRawValue在序列化时有效。就我对JavaDocs的理解而言,它不适用于反序列化。