2017-12-11 11 views
0

私はSpringには新しく、基本的にRESTサービスを初めて作成しようとしています。返信したいデータの中には、プロパティファイルのデータがあります。Spring Boot:プロパティファイルから変数を持つクラスで@RestControllerを使用する方法

これは私のコンフィグレーション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 
} 

そして、これは私がそのエンドポイントに移動すると、すべてがnullである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} 

は、誰もが私が間違ってやっているかを見ることができますか?それとも一般的にこれを達成するためのよりよい方法があるか?

ありがとうございます!

答えて

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

'ProviderInfo'をマネージドBeanにする1つの方法は、' @ Component'でそれをアノテートすることです。 –

+0

これは私のために働いたものです。ありがとう! –

0

はまた、あなたは次のように@Componentまたは@Serviceのいずれかを使用して、春の豆のライフサイクルにProviderInfoクラスを追加する必要があります。

@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使用することができます。

関連する問題