java - 如何在自定义 json 序列化器中获取属性或字段名称

标签 java json jackson

我有一个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/

相关文章:

java - 将 JUnitCore 与 Spring 结合使用

java - OSX 上的 ProcessBuilder

java - DefaultMessageListenerContainer 不会停止

MySQL 将 Json 数组展平为值字符串

java - 在 Spring MVC Controller 中选择 JsonView

java - Spring 3将@Required字段注入(inject)为NULL

php - 返回的 JSON MIME 类型存在问题

java - 带有 Json 解析的 ArrayAdapter

java - 在 spring-boot 中将 protobuf 作为 JSON 发送

json - Jackson JSON 序列化 - 指定递归级别