从配置中动态读取@JsonProperty



我正在开发一个使用杰克逊注释的 Spring 启动应用程序。

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

示例 JSON 输入

{"s":12}

法典

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

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

而不是

@JsonProperty("s")
private Integer stream;

使用配置执行上述代码时出现问题:

变量"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;

相关内容

  • 没有找到相关文章

最新更新