本文章記錄在工作開發中自己如何去調用別人的服務,使用 OKHttpClient
本文還用到了 @Component 註解
- @controller 控制器(注入服務)
- @service 服務(注入dao)
- @repository dao(實現dao訪問)
- @component (把普通pojo實例化到spring容器中,相當於配置文件中的
<bean id="" class=""/>
)
@Component
public class HttpClientUtils {
//我也不清楚爲啥直接使用
/*
@Value("${address-path.address}")
private String address;
*/
// 拿不到值,所以只好這樣進行注入(知道的大佬 指點一下)
private static String address;
@Value("${address-path.address}")
public void setAddress(String address) {
this.address = address;
}
public static Map<String, Object> GetPivture(String url) {
//創建OkHttpClient對象
OkHttpClient client = new OkHttpClient();
//創建Request對象 請求接口將請求的參數添加到接口地址後面
//address是請求地址 url 是後面的參數(命名不規範見諒)
Request request = new Request.Builder().url(address + url).build();
Response response = null;
//得到Response對象
try {
response = client.newCall(request).execute();
if (response.isSuccessful()) {
String result = response.body().string();
if (!"".equals(result)) {
//這個地方是解析請求返回的參數
Map<String, Object> map = (Map<String, Object>) JSON.parse(result);
Map<String, Object> datas = (Map<String, Object>) map.get("data");
return datas;
} else {
return null;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
由於公司不讓使用實體類,所以在 Controller層 在接收參數的時候,這樣寫:
@ApiOperation("項目信息錄入")
@PostMapping("/projectEntering")
public CommonResult projectEntering(
@ApiParam(name = "xmmc", value = "項目名稱") @RequestParam String xmmc,
@ApiParam(name = "aa", value = "某某AA") @RequestParam String aa,
@ApiParam(name = "bb", value = "某某BB") @RequestParam String bb,
@ApiParam(name = "cc", value = "某某CC") @RequestParam String cc,
@ApiParam(name = "dd", value = "某某DD") @RequestParam(required = false) String cc,
HttpServletRequest request) {
//調用getParametersMap(),將所有的參數,統計放到Map中
Map<String, Object> parametersMap = BaseParamMapUtils.getParametersMap(request);
...寫邏輯...
}
用到了 Enumeration
Enumeration接口 中定義了一些方法,通過這些方法可以枚舉(一次獲得一個)對象集合中的元素。
-
boolean hasMoreElements( )
測試此枚舉是否包含更多的元素。 -
Object nextElement( )
如果此枚舉對象至少還有一個可提供的元素,則返回此枚舉的下一個元素。
/**
* 獲取全部的參數(轉成Map)
*
* @param request
* @return form/data request.getParameter(pName); application/json
* inputStream
*/
public static Map<String, Object> getParametersMap(HttpServletRequest request) {
//Enumeration接口中定義了一些方法,通過這些方法可以枚舉(一次獲得一個)對象集合中的元素。
Enumeration<?> pNames = request.getParameterNames();
Map<String, Object> params = new HashMap<>();
//測試此枚舉是否包含更多的元素 -> boolean
while (pNames.hasMoreElements()) {
// 如果此枚舉對象至少還有一個可提供的元素,則返回此枚舉的下一個元素 -> Object
String pName = (String) pNames.nextElement();
// 簽名不算
if ("sign".equals(pName)) {
continue;
}
Object pValue = request.getParameter(pName);
params.put(pName, pValue);
}
return params;
}