我有以下Java bean类,使用Jackson转换为JSON.
public class Thing {
public String name;
@JsonRawValue
public Map content = new HashMap();
}
Run Code Online (Sandbox Code Playgroud)
content是一个地图,其值将是来自其他来源的原始JSON.例如:
String jsonFromElsewhere = "{ \"foo\": \"bar\" }";
Thing t = new Thing();
t.name = "test";
t.content.put("1", jsonFromElsewhere);
Run Code Online (Sandbox Code Playgroud)
所需的生成JSON是:
{"name":"test","content":{"1":{ "foo": "bar" }}}
Run Code Online (Sandbox Code Playgroud)
但是使用@JsonRawValue结果:
{"name":"test","content":{1={ "foo": "bar" }}}
Run Code Online (Sandbox Code Playgroud)
我需要的是一种@JsonRawValue仅为Map的值指定的方法.这可能与杰克逊有关吗?
正如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();
}
}
Run Code Online (Sandbox Code Playgroud)
不。不过,您可以轻松地创建自定义JsonSerializer来执行此操作。
另外,也许只使用一次性 POJO:
public class RawHolder {
@JsonProperty("1")
public String raw;
}
public class Thing {
public String name;
public RawHolder content;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5742 次 |
| 最近记录: |