通用返回类<使用泛型>
@Data
public class MyResult<T>
{
private String resultCode;
private String resultMessage;
private T resultData = null;
public MyResult(T obj){
resultMessage = "SUCCESS";
resultCode = "0";
resultData = obj;
}
}
自定义RestTemplate
@Slf4j
public class ExtRestTemplate<T> extends RestTemplate {
public static final int TIMEOUT_DEFAULT = 600000;
public ExtRestTemplate(int timeoutInMilliseconds) {
super();
setTimeout(timeoutInMilliseconds);
}
private void setTimeout(int timeoutInMilliseconds) {
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(timeoutInMilliseconds);
requestFactory.setReadTimeout(timeoutInMilliseconds);
super.setRequestFactory(requestFactory);
}
static public <T> MyResult<T> postForMyResult(String url, Object obj, TypeReference<MyResult<T>> t) {
return postForResult(url, obj, TIMEOUT_DEFAULT, t);
}
static public <T> MyResult<T> postForResult(String url, Object obj, int timeout, TypeReference<MyResult<T>> t) {
ExtRestTemplate<T> restTemplate = new ExtRestTemplate<>(timeout);
String resultStr = restTemplate.postForObject(url, obj, String.class);
if(resultStr == null) {
log.error("Result of postForObject is null. Perhapse url " + url + " is not exist.");
return null;
}
MyResult<T> result = JSON.parseObject(resultStr, t);
return result;
}
}
调用
import com.alibaba.fastjson.TypeReference;
List<User> result = ExtRestTemplate.postForObject("http://localhost:8080/user/queryPost", new TypeReference<MyResult<List<User>>>() {});