二次封装RestTemplate实现个人页展示

版权声明:本文为博主原创文章,未经博主允许不得转载。 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
群里有相关资源
欢迎和大家一起学习、交流、提升!
==============================

猜你喜欢

转载自blog.csdn.net/shenzhen_zsw/article/details/89473455