所以我是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
}
这是RestController
@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}
有人能看出我做错了什么吗?或者,如果有更好的方法来实现这一点?
谢谢!
答案 0 :(得分:3)
@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类。
答案 1 :(得分:0)
此外,您需要使用@Component或@Service将ProviderInfo类添加到Spring Bean生命周期中,如下所示:
@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
}
只有这样,您才能在ProviderInfoController类中使用@Autowired。