我正在开发一个使用Jackson批注的Spring引导应用程序。

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

JSON输入示例

{"s":12}




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

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


代替

@JsonProperty("s")
private Integer stream;


问题
使用config执行以上代码时:


  变量“ s”未标识为流


除非我使用常量@JsonProperty("s"),否则这是不希望的。

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

最佳答案

赋予@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;

关于java - 从配置动态读取@JsonProperty,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50948397/

10-11 01:01