get调用,需要的参数都在url里,所以函数所需的参数只需要两个,一个url,一个返回数据。
type为返回数据的类型
@Autowired
OkHttpClient okHttpClient;
@Autowired
ObjectMapper objectMapper;
public <T> T getMulti(String url, Class<T> type) {
T result = null;
Request request1 = new Request.Builder().url(url).build();
Response response = null;
String responseBody = null;
try {
response = okHttpClient.newCall(request1).execute();
responseBody = response.body().string();
result = objectMapper.readValue(responseBody, type);
} catch (IOException e) {
logger.error("错误请求地址:" + url + "错误原因:" + e.getMessage());
} finally {
IOUtils.closeQuietly(response);
return result;
}
}
post请求需要三个参数,url,参数的实体类,返回体的类
public static final MediaType JSON = MediaType.parse("application/json;charset=utf-8");
public <T extends WeixinBaseResponseDto, TR> T postMulti(String url, TR request, Class<T> type) {
T result = null;
Response response = null;
String json = null;
try {
json = JSONObject.toJSONString(request);
RequestBody requestBody = RequestBody.create(JSON, json);
Request request1 = new Request.Builder().url(url).post(requestBody).build();
response = okHttpClient.newCall(request1).execute();
String responseBody = response.body().string();
result = objectMapper.readValue(responseBody, type);
} catch (Exception e) {
logger.error("错误url:" + url + "错误参数:" + json);
} finally {
IOUtils.closeQuietly(response);
return result;
}
}
这两种方法都需要引入
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.7.0</version>
</dependency>
还可以用RestTemplate类,这样就不需要多余的引用。
public <T, TR> T postMult2(String url, TR request, Class<T> type) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(org.springframework.http.MediaType.APPLICATION_JSON_UTF8);
HttpEntity<TR> httpEntity = new HttpEntity<TR>(request, headers);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, httpEntity, String.class);
T result = JSON.parseObject(responseEntity.getBody(), type);
//这里可以删除,up只是为了记录一下
JSONObject jsonObject = JSONObject.parseObject(responseEntity.getBody());
JSONObject data = JSONObject.parseObject(jsonObject.getString("data"));
if (data != null) {
String ssmn = data.getString("ssmnnumber");
if (ssmn != null) {
threadLocal.set(ssmn);
}
}
return result;
}