【发布时间】:2015-06-15 13:26:56
【问题描述】:
我有两个这样的课程:
public class A {
String aProp = "aProp";
public String getAProp() {
return aProp;
}
}
public class B {
String bProp = "bProp";
A a = new A();
@JsonProperty("bProp")
public String getBProp() {
return bProp;
}
@JsonSerialize(using = CustomSerializer.class)
public A getA() {
return a;
}
}
我希望得到这样的 JSON:
{
"bProp": "bProp", // just serizlised bProp
"sProp1": "sProp1_aProp", // computed using aProp
"sProp2": "sProp2_aProp" // computed another way
}
所以我这样写了自定义JsonSerializer:
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
public class CustomSerializer extends JsonSerializer<A> {
@Override
public void serialize(A a, JsonGenerator json, SerializerProvider provider) throws IOException {
json.writeStringField("sProp1", "sProp1_" + a.getAProp());
json.writeStringField("sProp2", "sProp2_" + a.getAProp());
}
}
但我不断收到错误消息:
com.fasterxml.jackson.core.JsonGenerationException: Can not write a field name, expecting a value
除非我将json.writeStartObject(); 和json.writeEndObject(); 放在序列化方法中(这样会产生错误的JSON)。
所以我正在寻找像 @JsonUnwrapped 这样的解决方案,以与自定义 JsonSerializer 一起使用。
【问题讨论】:
-
请修正示例代码。您正在使用 JsonSerializer 来序列化 A 类型的字段。这没有多大意义。
-
@JBNizet,谢谢,已修复。