SpringBoot通过注解ConfigurationProperties可以将application.yaml的参数注入到类中,但是笔者踩了个大坑
@Component
@Data
@ConfigurationProperties("project.wechat")
public class WeChatSchedule {
private String appId;
private String secret;
@Resource
private RestTemplate restTemplate;
public void getAccessToken() {
final String GET_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token";
String url = UriComponentsBuilder
.fromHttpUrl(GET_TOKEN_URL)
.queryParam("appid", appId)
.queryParam("secret", secret)
.toUriString();
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
if (response.getStatusCode().is2xxSuccessful()) {
String body = response.getBody();
System.out.println("body=" + body);
}
}
}
在一个腾讯获取AccessToken的类中,我将方法名称写成getAccessToken后,SpringBoot一直报错,无法注入appId,secret:
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to bind properties under ‘project.wechat’ to com.samele.epay.schedule.WeChatSchedule:
Reason: org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under ‘project.wechat’ to com.samele.epay.schedule.WeChatSchedule
Action:
Update your application’s configuration
解决办法是:更新你的application配置
但是这个描述实在是坑爹,调整了一宿,修改了类名,修改了参数名,改了驼峰写法等等。一直报错。
后来发现把getAccessToken换个名字,比如flushAccessToken之后,就注入成功了。
神特么逻辑,看来以后还要注意,有参数注入的时候尽量避免get和set起始的方法。避免被SpringBoot错误的识别。
评论(已关闭)
评论已关闭