我有以下 Java bean 类,使用 Jackson 将其转换为 JSON。
public class Thing {
public String name;
@JsonRawValue
public Map content = new HashMap();
}
content
是一个映射,其值将是来自另一个源的原始 JSON。例如:
String jsonFromElsewhere = "{ \"foo\": \"bar\" }";
Thing t = new Thing();
t.name = "test";
t.content.put("1", jsonFromElsewhere);
所需生成的 JSON 是:
{"name":"test","content":{"1":{ "foo": "bar" }}}
然而使用@JsonRawValue
结果是:
{"name":"test","content":{1={ "foo": "bar" }}}
我需要的是一种指定的方法@JsonRawValue
仅适用于地图的值。这对杰克逊来说可能吗?
正如 StaxMan 指出的那样,实现自定义非常容易JsonSerializer
.
public class Thing {
public String name;
@JsonSerialize(using=MySerializer.class)
public Map<String, String> content = new HashMap<String, String>();
}
public class MySerializer extends JsonSerializer<Map<String, String>> {
public void serialize(Map<String, String> value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
for (Map.Entry<String, String> e: value.entrySet()) {
jgen.writeFieldName(e.getKey());
// Write value as raw data, since it's already JSON text
jgen.writeRawValue(e.getValue());
}
jgen.writeEndObject();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)