Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring boot应用程序中使用@Configuration访问配置_Java_Spring_Spring Boot - Fatal编程技术网

Java 在spring boot应用程序中使用@Configuration访问配置

Java 在spring boot应用程序中使用@Configuration访问配置,java,spring,spring-boot,Java,Spring,Spring Boot,我正在创建一个自定义反序列化器类,它需要在我的Spring Boot应用程序中读取一些自定义配置。我的班级看起来有点像这样: @配置 公共类ItemDeserializer扩展StdDeserializer{ @值(“${config.name}”) 私有字符串nameConfig; 公共项反序列化程序(){ 这个(空); } 公共项反序列化程序(类vc){ 超级(vc); } @凌驾 公共项反序列化(JsonParser jp,反序列化上下文ctxt) 抛出IOException、JsonP

我正在创建一个自定义反序列化器类,它需要在我的Spring Boot应用程序中读取一些自定义配置。我的班级看起来有点像这样:

@配置
公共类ItemDeserializer扩展StdDeserializer{
@值(“${config.name}”)
私有字符串nameConfig;
公共项反序列化程序(){
这个(空);
} 
公共项反序列化程序(类vc){
超级(vc);
}
@凌驾
公共项反序列化(JsonParser jp,反序列化上下文ctxt)
抛出IOException、JsonProcessingException{
JsonNode节点=jp.getCodec().readTree(jp);
//基于配置值读入项目名称
String itemName=node.get(nameConfig.asText();
返回新项目(itemName);
}
}
我在Item类上调用它,如下所示:

@JsonDeserialize(使用=ItemDeserializer.class)
公共类项目{
私有字符串itemName;
//接球手和接球手
}

nameConfig
字段从未设置适当的配置值。添加@Configuration可以在我的应用程序的其他部分工作,但这些类包括@Bean注释和其他我认为必要的东西。如何对该类进行注释以使其工作?

@Configuration表示一个类声明了一个或多个@Bean方法,并且可以由Spring容器处理,以便在运行时为这些Bean生成Bean定义和服务请求


你不能这样使用它,你需要另一种策略。我建议阅读此链接:

如果您使用的是SpringFramework 2.5+,那么解决方案是
SpringBeanAutowiringSupport

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);
    }
}
公共类ItemDeserializer扩展StdDeserializer{
@值(“${config.name}”)
私有字符串nameConfig;
公共项反序列化程序(){
这个(空);
} 
公共项反序列化程序(类vc){
超级(vc);
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
@凌驾
公共项反序列化(JsonParser jp,反序列化上下文ctxt)
抛出IOException、JsonProcessingException{
JsonNode节点=jp.getCodec().readTree(jp);
//基于配置值读入项目名称
String itemName=node.get(nameConfig.asText();
返回新项目(itemName);
}
}

你所说的“在我的应用程序的其他部分工作”是什么意思。请您澄清一下您面临的问题好吗?@M.Mas。我把我的问题扩大了一点。当我说它在我的应用程序的其他部分工作时,我是说我在我的应用程序的其他部分成功地获得了配置,就像我在这门课上一样。。。用配置注释它,用值获取值。你是说通过添加@Configuration,问题就解决了。您可以添加代码或您遇到问题的用例吗?thanks@M.Mas. 以上代码就是问题所在。它不起作用。nameConfig的值始终为null,即使它在我的配置文件中设置。您说过“nameConfig的值始终为null,即使它在我的配置文件中设置”。。。。如果您打印应用程序的环境,例如loalhost:8080/exactor/env,您是否看到“config.name”的值?它在yur配置道具文件中..谢谢!实际上,我使用的是一个较旧版本的Spring,但我可能会升级以利用此功能。我感谢你的帮助。