2017-12-11 23 views
0

저는 봄에 익숙하지 않아 기본적으로 처음으로 REST 서비스를 만들려고합니다. 반환하려는 데이터 중 일부는 속성 파일의 일부 데이터입니다.스프링 부트 : 속성 파일에서 변수를 가져 오는 클래스에서 @RestController를 사용하는 방법

@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'를 관리 빈으로 만드는 한 가지 방법은 그것을'@ 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를 사용할 수 있습니다.