我正在开发一个使用 Jackson 注释的 Spring boot 应用程序。
我想从配置中读取 @JsonProperty
的值,而不是使用常量字符串。
JSON 输入示例
{"s":12}
代码
我想从我的配置中读取属性:
@JsonProperty("${myconfig.fieldAlias.stream}")
private Integer stream;
而不是
@JsonProperty("s")
private Integer stream;
问题 使用配置执行上面的代码时:
variable "s" is not identified as stream
除非我使用常量@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/