Чтение свойств с исключениями Spring
Я пытаюсь прочитать свойства из файла с помощью Spring. Однако я постоянно получаю NullPointerException
s. Я не уверен, что я делаю неправильно, так как я уже сделал это в моем RestController
класс с @Configuration
аннотаций.
@Component
@PropertySource("classpath:recaptcha.properties")
public class RecaptchaProvider {
@Value("${com.xxx.user.recaptcha.verify.secret}")
private String secret;
@Value("${com.xxx.user.recaptcha.verify.url}")
private String serviceUrl;
public RecaptchaProvider() {
//do nothing
}
public String getSecret() {
return secret;
}
public String getServiceUrl() {
return serviceUrl;
}
}
И мой вызывающий класс:
@Component
public class RecaptchaServiceImpl implements RecaptchaService {
@Autowired
RecaptchaProvider provider;
@Override
public boolean isCaptchaValid(String response) {
String secret = provider.getSecret(); // Nullpointer here
String serviceUrl = provider.getServiceUrl();
CaptchaValidation captchaValidator = new CaptchaValidation();
ReCaptchaVerfiyResponse result =
captchaValidator.postForCaptchaValidation(secret, response, serviceUrl);
return Boolean.valueOf(result.getSuccess());
}
}
Настройка проекта:
и внутри моего файла свойств:
com.xxx.user.recaptcha.verify.url=https://www.google.com/recaptcha/api/siteverify
com.xxx.user.recaptcha.verify.secret=xxxxxxxxxxxx
Исключение:
java.lang.NullPointerException
at com.xxx.user.recaptcha.impl.RecaptchaServiceImpl.isCaptchaValid(RecaptchaServiceImpl.java:24)
at com.xxx.rest.user.impl.UserController.checkReCaptcha(UserController.java:135)
at com.xxx.rest.user.impl.UserController.addUser(UserController.java:87)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
1 ответ
Хорошо, благодаря M.Deinum "думаю", я исправил проблему. Я не понял, что смешал бин с компонентом, и забыл, что "новый" испортил весну.
Теперь это выглядит так
@Component
public class RecaptchaProvider {
private String secret;
private String serviceUrl;
public RecaptchaProvider(String secret, String serviceUrl) {
this.secret = secret;
this.serviceUrl = serviceUrl;
}
public String getSecret() {
return secret;
}
public String getServiceUrl() {
return serviceUrl;
}
}
Провайдер недвижимости
@Configuration
@PropertySource("classpath:recaptcha.properties")
public class RecaptchaConfig {
@Value("${com.xxx.user.recaptcha.verify.secret}")
private String secret;
@Value("${com.xxx.user.recaptcha.verify.url}")
private String serviceUrl;
@Bean
public RecaptchaProvider getRecaptchaConfig() {
return new RecaptchaProvider(secret,serviceUrl);
}
}
Сервис
@Autowired
RecaptchaConfig config;
@Override
public boolean isCaptchaValid(String response) {
RecaptchaProvider provider = config.getRecaptchaConfig();
String secret = provider.getSecret();
String serviceUrl = provider.getServiceUrl();
CaptchaValidation captchaValidator = new CaptchaValidation();
ReCaptchaVerfiyResponse result =
captchaValidator.postForCaptchaValidation(secret, response, serviceUrl);
return Boolean.valueOf(result.getSuccess());
}
}
И, наконец, метод в моем контроллере
@Autowired
protected RecaptchaServiceImpl recaptchaService;
private boolean checkReCaptcha(String captchaResponse){
return recaptchaService.isCaptchaValid(captchaResponse);
}