Spring Boot:如何将@RestController用于变量来自属性文件的类

Spring Boot:如何将@RestController用于变量来自属性文件的类,rest,spring-boot,spring-restcontroller,spring-config,Rest,Spring Boot,Spring Restcontroller,Spring Config,所以我对Spring是新手,我基本上是第一次尝试做一个REST服务。我想返回的一些数据是来自属性文件的数据 这是我的配置bean: @Configuration @PropertySource("classpath:client.properties") public class PropertyConfig { @Bean public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceh

所以我对Spring是新手,我基本上是第一次尝试做一个REST服务。我想返回的一些数据是来自属性文件的数据

这是我的配置bean:

@Configuration
@PropertySource("classpath:client.properties")
public class PropertyConfig {

    @Bean
    public static PropertySourcesPlaceholderConfigurer 
    propertySourcesPlaceholderConfigurer() {
         return new PropertySourcesPlaceholderConfigurer();
    }
}
这是包含我想从API返回的信息的类。当我将鼠标悬停在这些值上时,我可以看到该属性正在被注入

public class ProviderInfo {

    @Value("${op.iss}") private String issuer;
    @Value("${op.jwks_uri}") private String jwksURI;
    @Value("${op.authz_uri}") private String authzURI;
    @Value("${op.token_uri}") private String tokenURI;
    @Value("${op.userinfo_uri}") private String userInfoURI;

    // Getter methods
}
这是REST控制器

@RestController
public class ProviderInfoController {

    @RequestMapping(value = "/provider-info", method = RequestMethod.GET)
    public ProviderInfo providerInfo() {
        return new ProviderInfo();
    }
}
当我导航到该端点时,所有内容都为空:

{"issuer":null,"jwksURI":null,"authzURI":null,"tokenURI":null,"userInfoURI":null}
有人能看出我做错了什么吗?或者,总的来说,是否有更好的方法来实现这一点


谢谢

@Value注释的处理由Spring完成,因此需要从Spring获取ProviderInfo实例,以便实际设置值

@RestController
public class ProviderInfoController {

    @Autowired
    private ProviderInfo providerInfo;

    @RequestMapping(value = "/provider-info", method = RequestMethod.GET)
    public ProviderInfo providerInfo() {
        return providerInfo;
    }
}

这还要求Spring选择并处理ProviderInfo类。

@Value注释的处理由Spring完成,因此您需要从Spring获取ProviderInfo实例,以便实际设置值

@RestController
public class ProviderInfoController {

    @Autowired
    private ProviderInfo providerInfo;

    @RequestMapping(value = "/provider-info", method = RequestMethod.GET)
    public ProviderInfo providerInfo() {
        return providerInfo;
    }
}

这还要求Spring选择并处理ProviderInfo类。

此外,您需要使用@Component或@Service将ProviderInfo类添加到Springbean生命周期中,如下所示:

@Component
public class ProviderInfo {

    @Value("${op.iss}") private String issuer;
    @Value("${op.jwks_uri}") private String jwksURI;
    @Value("${op.authz_uri}") private String authzURI;
    @Value("${op.token_uri}") private String tokenURI;
    @Value("${op.userinfo_uri}") private String userInfoURI;

    // Getter methods
}

只有这样,您才能在ProviderInfo控制器类中使用@Autowired。

此外,您还需要使用@Component或@Service将ProviderInfo类添加到SpringBean生命周期中,如下所示:

@Component
public class ProviderInfo {

    @Value("${op.iss}") private String issuer;
    @Value("${op.jwks_uri}") private String jwksURI;
    @Value("${op.authz_uri}") private String authzURI;
    @Value("${op.token_uri}") private String tokenURI;
    @Value("${op.userinfo_uri}") private String userInfoURI;

    // Getter methods
}

只有这样,您才能在ProviderInfo控制器类中使用@Autowired。

创建
ProviderInfo
托管bean的一种方法是使用
@Component
对其进行注释
ProviderInfo
托管bean的一种方法是使用
@Component
对其进行注释