我有一个custom JsonSerializer对于字段(简化代码):
@JsonSerialize(using=Text1Serializer.class)
@JsonProperty("text1") // I need this inside the custom serializer
@Override
public String getTextOne() {
return "foo";
}
// ...
public static class Text1Serializerextends JsonSerializer<String> {
@Override
public void serialize(String value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
// how to get "text1" here?
provider.defaultSerializeValue(value, jgen);
}
}
由于我需要使用类似的逻辑序列化大约十个其他字段,这仅取决于字段名称,因此如果我可以在自定义序列化程序中获取属性名称,这将对我非常有帮助 -而不是编写十个相同的序列化器。
我已经看到,在 serialize()
方法中,我可以使用 JsonGenerator.getCurrentValue()
获取整个对象(请参阅 this answer ),但我没有'找到一种获取字段名称的方法。
我使用的是 Jackson 2.6
最佳答案
您可以在自定义 json 序列化程序中获取字段名称,如下所示:
@JsonComponent
public class Text1Serializerextends extends JsonSerializer<String> {
@Override
public void serialize(String value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
// will output "text1"
System.out.println(jgen.getOutputContext().getCurrentName());
provider.defaultSerializeValue(value, jgen);
}
}
关于java - 如何在自定义 json 序列化器中获取属性或字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33519354/