版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shenzhen_zsw/article/details/89473455
二次封装RestTemplate实现个人页展示
Rests
package com.mooc.house.api.utils;
import java.util.concurrent.Callable;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public final class Rests {
private static final Logger LOGGER = LoggerFactory.getLogger(Rests.class);
private Rests(){};
private static DefaultHanlder defaultHanlder = new DefaultHanlder();
/**
* 执行服务调用,并判断返回状态
* @param callable
* @return
*/
public static <T> T exc(Callable<T> callable){
return exc(callable, defaultHanlder);
}
public static <T> T exc(Callable<T> callable,ResultHandler handler){
T result = sendReq(callable);
return handler.handle(result);
}
public static String toUrl(String serviceName,String path){
return "http://" + serviceName + path;
}
public static class DefaultHanlder implements ResultHandler {
@Override
public <T> T handle(T result) {
int code = 1;
String msg = "";
try {
code = (Integer)FieldUtils.readDeclaredField(result, "code", true);
msg = (String)FieldUtils.readDeclaredField(result, "msg", true);
} catch (Exception e) {
//ignore
}
if (code != 0) {
throw new RestException("Get erroNo " + code + " when execute rest call with errorMsg " +msg);
}
return result;
}
}
public interface ResultHandler{
<T> T handle(T result);
}
public static <T> T sendReq(Callable<T> callable){
T result = null;
try {
result = callable.call();
} catch (Exception e) {
throw new RestException("sendReq error by " + e.getMessage());
}finally {
LOGGER.info("result={}",result);
}
return result;
}
}
封装前后调用用户服务对比
/**
* 调用鉴权服务
* @param token
* @return
*/
@HystrixCommand(fallbackMethod="getUserByTokenFb")
public User getUserByToken(String token) {
String url = "http://" + userServiceName + "/user/get?token=" + token;
ResponseEntity<RestResponse<User>> responseEntity = rest.get(url, new ParameterizedTypeReference<RestResponse<User>>() {});
RestResponse<User> response = responseEntity.getBody();
if (response == null || response.getCode() != 0) {
return null;
}
return response.getResult();
}
@HystrixCommand
public List<Agency> getAllAgency() {
return Rests.exc(() ->{
String url = Rests.toUrl(userServiceName, "/agency/list");
ResponseEntity<RestResponse<List<Agency>>> responseEntity =
rest.get(url, new ParameterizedTypeReference<RestResponse<List<Agency>>>() {});
return responseEntity.getBody();
}).getResult();
}
==============================
QQ群:143522604
群里有相关资源
欢迎和大家一起学习、交流、提升!
==============================