java - 使用 @Configuration 访问 Spring Boot 应用程序中的配置
问题描述
我正在创建一个自定义反序列化器类,该类需要在我的 Spring Boot 应用程序中读取一些自定义配置。我的课看起来有点像这样:
@Configuration
public class ItemDeserializer extends StdDeserializer<Item> {
@Value("${config.name}")
private String nameConfig;
public ItemDeserializer() {
this(null);
}
public ItemDeserializer(Class<?> vc) {
super(vc);
}
@Override
public Item deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
//read in item name based on configuration value
String itemName = node.get(nameConfig).asText();
return new Item(itemName);
}
}
我在 Item 类上调用它,如下所示:
@JsonDeserialize(using = ItemDeserializer.class)
public class Item {
private String itemName;
//getters and setters
}
该nameConfig
字段永远不会使用适当的配置值进行设置。添加@Configuration 可以在我的应用程序的其他部分使用,但这些类包括@Bean 注释和其他我怀疑是必要的东西。我怎样才能注释这个类以使其工作?
解决方案
解决方案是SpringBeanAutowiringSupport
如果您使用的是 Spring Framework 2.5+。
public class ItemDeserializer extends StdDeserializer<Item> {
@Value("${config.name}")
private String nameConfig;
public ItemDeserializer() {
this(null);
}
public ItemDeserializer(Class<?> vc) {
super(vc);
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
@Override
public Item deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
//read in item name based on configuration value
String itemName = node.get(nameConfig).asText();
return new Item(itemName);
}
}
推荐阅读
- nginx - 有条件地映射 nginx 配置中的值
- r - TidyR 解决方案在多列上计算 str_detect 的数量?
- python - 从 reactjs 客户端连接到安全 Web 套接字 python 服务器
- c++ - CMake 共享(或静态?)库无法链接
- javascript - 尝试在 WebdriverIO 中断言 getText 时出错
- jsp - 在 jsps 中使用 web 组件
- r - 在 R 中分配“父”调色板
- python - 面对 LinAlgError:矩阵是奇异的
- python - 出现错误“ValueError:时间数据''与格式'%Y-%m-%d %H:%M:%S'不匹配”
- rust - 通过原始指针克隆类型擦除的 Arc 是否安全?