java - 从配置中动态读取@JsonProperty

标签 java json spring-boot jackson spring-config

我正在开发一个使用 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/

相关文章:

java - 如何将事件数据和事件名称从 Spring Boot 发送到 Angular?

java - HTTP 状态 404 – 未找到 : The origin server did not find a current representation for the target resource

java - 如何分析 Java 1.3 中的内存泄漏

json - 使用 T-SQL 将 JSON 转换为表

java - 带有子对象的 pojo 的 JSON 序列化

java - Spring Security OAuth2 舞蹈和获取参数

Java 方法返回带有动态对象的 HashMap<key, Object>

java - 在此字符串操作期间将创建多少个对象?

Android JsonObject 到数组示例

spring-mvc - Thymeleaf 模板解析器前缀与 Gradle