2

我正在开发一个使用 Jackson 注释的 Spring Boot 应用程序。

我想@JsonProperty从配置中读取值,而不是使用常量字符串。

示例 JSON 输入

{"s":12}

代码

我想从我的配置中读取属性:

@JsonProperty("${myconfig.fieldAlias.stream}")
private Integer stream;

代替

@JsonProperty("s")
private Integer stream;

问题 在使用配置执行上面的代码时:

变量“s”未标识为流

除非我使用 constant @JsonProperty("s"),这是不希望的。

是否可以使用动态JsonProperty值?如果是这样,这样做的正确方法是什么?

4

1 回答 1

0

给定的名称@JsonProperty必须是静态给定的。您可以做的是通过为属性实现自定义序列化程序来动态覆盖给定名称:

public static class StreamSerializer extends JsonSerializer<Integer> {
    @Override public void serialize(Integer value, JsonGenerator jsonGenerator, SerializerProvider provider)
        throws IOException {
        jsonGenerator.writeStartObject();
        jsonGenerator.writeStringField("s", your_dynamic_name_here);// dynamic field name
        jsonGenerator.writeEndObject();
    }
}

并像这样使用它:

@JsonProperty("s")
@JsonSerialize(using = StreamSerializer.class)
private Integer stream;
于 2018-06-20T12:41:31.637 回答