最近做一个项目,其中一个需要使用HTTP请求去请求系统外部的一个接口。一开始我是在代码里面写死,然后在用变量去替换的。
如下所示:
String url = "/aaa/Bbb/access_token?app&secret=" + secret + "&code=" + code + "&grant_type=123";
其中appid,secret和code是三个变量,需要我的程序里面通过解码Base64的请求头和查询数据库得出的结果,一开始我是将这个url直接写在代码里面再用httpGet去获取请求结果,后来发现这样做的话,其实很不灵活。因为我在做的项目是Springcloud的微服务,要是想修改的时候,就得进去到代码里面的方法体去修改,维护起来相当麻烦。
这时候Spring的注入就起作用了,可以将请求url的值写在配置文件里面,再在请求头加上这样一句:
@Value("${}")
private String getAccessTokenUrl;
在配置文件中写上
=XXXXX(XXXXX是具体的url字符串)
这时候,这个值就会被注入为配置文件里面写的那个String,但是,这个时候问题来了,因为woodenURL里面是有变量的,需要在Service方法体里面去拼接才能拼接成可以成功请求的url,这个时候就可以用String的占位符来解决这个问题了。
首先,在配置文件中的赋值,需要赋予的值是
=/aaa/Bbb/access_token?appid=%s&secret=%s&code=%s&grant_type=123
然后在Service的代码中处理是这样的:
String url = (getAccessTokenUrl, wechat_appid, wechat_secret, code);
这样,通过String的方法就可以将后面添加的参数替换掉配置文件中的占位符"%s"。
还有一种方式的,下面是两个例子的比较:
Java代码:
String stringFormat = "lexical error at position %s, encountered %s, expected %s ";
String messageFormat ="lexical error at position {0}, encountered {1}, expected {2}";
((stringFormat, 123, 100, 456));
((messageFormat, new Date(), 50, 123));
得出的结果是:
lexical error at position 123, encountered 100, expected 456
lexical error at position 19-03-27 下午14:35, encountered 50, expected 123
看了下MessageFormat的api说明,这个占位符参数功能更加强大点,支持type,style等限定。所以如果需要使用高级功能建议是使用MessageFormat。