0

所以我是 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}

谁能看到我做错了什么?或者,如果有更好的方法来实现这一点?

谢谢!

4

2 回答 2

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 类。

于 2017-12-11T17:16:24.053 回答
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。

于 2017-12-12T10:49:13.973 回答