spring中RestTemplate的使用

一.導入依賴

<dependency> 
            <groupId>org.springframework</groupId> 
            <artifactId>spring-web</artifactId> 
            <version>${spring.version}</version> 
        </dependency>

 

二.配置

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> 
    <constructor-arg> 
        <bean 
            class="org.springframework.http.client.SimpleClientHttpRequestFactory"> 
            <property name="connectTimeout" value="10000" /> 
            <property name="readTimeout" value="10000" /> 
        </bean> 
    </constructor-arg> 
    </bean>

 

三.編碼

package com.pz998.app.service.busi.impl; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import org.apache.commons.lang.StringUtils; 
import org.apache.commons.lang.time.DateFormatUtils; 
import org.apache.log4j.Logger; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.web.client.RestTemplate; 

import com.alibaba.fastjson.JSONObject; 
import com.pz998.rpc.common.utils.HttpClientUtil; 
import com.pz998.rpc.model.entity.OrderRpc; 
import com.pz998.rpc.model.entity.ServiceRpc; 
import com.pz998.rpc.model.entity.TrackerChannelRpc; 
import com.pz998.rpc.service.TrackerChannelRpcService; 

import org.springframework.http.HttpEntity; 
import org.springframework.http.HttpHeaders; 
import org.springframework.http.HttpMethod; 
import org.springframework.http.HttpRequest; 
import org.springframework.http.MediaType; 
import org.springframework.http.ResponseEntity; 
import org.springframework.http.client.ClientHttpRequestExecution; 
import org.springframework.http.client.ClientHttpRequestInterceptor; 
import org.springframework.http.client.ClientHttpResponse; 
import org.springframework.scheduling.annotation.Async; 
import org.springframework.stereotype.Service; 
import org.springframework.util.CollectionUtils; 
@Service("restClient") 
public class RESTClient { 
    public static Logger log  = Logger.getLogger(RESTClient.class); 

    @Value("${hys_token_key}") 
    private String hysTokenKey; 

    @Value("${hys_token_secret}") 
    private String hysTokenSecret; 

    @Value("${api_hys_token}") 
    private String apiHysToken; 

    @Value("${api_hys_add_order}") 
    private String apiHysAddOrder; 

    @Value("${api_hys_update_order_state}") 
    private String apiHysUpdateOrderState; 

    @Value("${api_hys_update_order_amount}") 
    private String apiHysUpdateOrderAmount; 

    @Autowired 
    private TrackerChannelRpcService trackerChannelRpcService; 

    private static Integer SUCCESS_STATUS = 0; 
    private static Integer FAILE_STATUS = 1; 
    private static Map<Integer,String> ORDER_TYPE_MAP = new HashMap<Integer,String>(); 

    static{ 
        ORDER_TYPE_MAP.put(ServiceRpc.YYMY.intValue(), "registered"); //預約名醫 
        ORDER_TYPE_MAP.put(ServiceRpc.JYPZ.intValue(), "accompany"); //基礎陪診 
        ORDER_TYPE_MAP.put(ServiceRpc.GHPZ.intValue(), "registered_accompany"); //掛號陪診 
        ORDER_TYPE_MAP.put(ServiceRpc.JJQH.intValue(), "emergency"); //緊急取號 
        ORDER_TYPE_MAP.put(ServiceRpc.DQBG.intValue(), "proxy_report"); //代取報告 

        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_DZ.intValue(),"room_service");  //打針 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_SY.intValue(), "room_service");//輸液 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_MBZ.intValue(), "room_service");//美白針 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_YFHL.intValue(), "room_service");//孕婦護理 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_LZZSY.intValue(), "room_service");//留置針輸液 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_JMCX.intValue(), "room_service");//靜脈採血 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_PTHY.intValue(), "room_service");//普通換藥 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_PICC_HY.intValue(), "room_service");//PICC換藥 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_DN.intValue(), "room_service");//導尿 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_BS.intValue(), "room_service");//鼻飼 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_XT.intValue(), "room_service");//吸痰 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_YCHL.intValue(), "room_service");//壓瘡護理 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_ZKHL.intValue(), "room_service");//造口護理 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_GCHL.intValue(), "room_service");//灌腸護理 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_WKCX.intValue(), "room_service");//外科拆線 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_HYHL.intValue(), "room_service");//會陰護理 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_WHZL.intValue(), "room_service");//霧化治療 
        ORDER_TYPE_MAP.put(ServiceRpc.YHSM_KQHL.intValue(), "room_service");//口腔護理 
    } 

    @Autowired 
    private RestTemplate restTemplate; 

    public String getHysToken(){ 
        Map<String,String> param = new HashMap<String,String>(); 
        param.put("companyKey", hysTokenKey); 
        param.put("companySecret", hysTokenSecret); 
        JSONObject result = null; 
        try{ 
            result = restTemplate.postForObject(apiHysToken, param, JSONObject.class); 
        }catch(Exception e){ 
            log.error("獲取好藥師token異常:"+e.getMessage());  
            return ""; 
        } 

        if(result == null){ 
            log.error("獲取好藥師token失敗");  
            return ""; 
        } 
        Integer status = result.getInteger("status"); 
        if(!SUCCESS_STATUS.equals(status)){ 
            String msg = result.getString("msg"); 
            log.error("獲取好藥師token失敗:"+msg);  
            return ""; 
        } 
        JSONObject dataJo = result.getJSONObject("data"); 
        String token = dataJo.getString("token"); 
        return token; 
    } 

    @Async 
    public void pushOrder(OrderRpc order){ 
        String token = getHysToken(); 
        if(StringUtils.isEmpty(token)){ 
            log.error("好藥師同步訂單["+order.getOrderNo()+"]無法獲取token"); 
            return; 
        } 

         HttpHeaders headers = new HttpHeaders(); 
         MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); 
         headers.setContentType(type); 
         headers.add("Accept", MediaType.APPLICATION_JSON.toString()); 
         Integer state = order.getState(); 
         List<TrackerChannelRpc>  trackerChannelRpcList =trackerChannelRpcService.getChannelByChannelNo(order.getCh()); 
         TrackerChannelRpc trackerChannelRpc = CollectionUtils.isEmpty(trackerChannelRpcList)?null:trackerChannelRpcList.get(0); 
         String channelName =  trackerChannelRpc==null?"":trackerChannelRpc.getName(); 

         JSONObject jsonObj = new JSONObject(); 
         jsonObj.put("memberId", order.getCustomerId()); 
         jsonObj.put("orderNo", order.getOrderNo()); 
         jsonObj.put("platform", "jk998"); 
         jsonObj.put("orderType", ORDER_TYPE_MAP.get(order.getType())); 
         jsonObj.put("channel", channelName); 
         jsonObj.put("subchannel", channelName); 
         jsonObj.put("orderStatus", state.toString()); 
         jsonObj.put("payment", "online"); 
         jsonObj.put("orderMoney",order.getAmount()); 
         jsonObj.put("orderTime", DateFormatUtils.format(order.getCreateTime(), "yyyy-MM-dd HH:mm:ss")); 

         JSONObject orderDetailJo = new JSONObject(); 
         jsonObj.put("orderDetail",orderDetailJo); 

         HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers); 
         JSONObject result = null; 
         try{ 
              Map<String,String> urlVariables = new HashMap<String,String>(); 
              urlVariables.put("token", token); 
              result = restTemplate.postForObject(apiHysAddOrder, formEntity, JSONObject.class,urlVariables); 
         }catch(Exception e){ 
             log.error("好藥師同步訂單["+order.getOrderNo()+"]異常:"+e.getMessage()); 
             return; 
         } 

         Integer status = result.getInteger("status"); 
         String msg = result.getString("msg"); 
         if(SUCCESS_STATUS.equals(status)){ 
             log.info("好藥師同步訂單["+order.getOrderNo()+"]成功"); 
         }else{ 
             log.error("好藥師同步訂單["+order.getOrderNo()+"]失敗:"+msg); 
         } 

    } 

    @Async 
    public void updateOrderState(OrderRpc order){ 
        String token = getHysToken(); 
        if(StringUtils.isEmpty(token)){ 
            return; 
        } 
         HttpHeaders headers = new HttpHeaders(); 
         MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); 
         headers.setContentType(type); 
         headers.add("Accept", MediaType.APPLICATION_JSON.toString()); 

        JSONObject paramJo = new JSONObject(); 
        paramJo.put("platform", "jk998"); 
        paramJo.put("orderStatus", order.getState()); 
        paramJo.put("orderType", ORDER_TYPE_MAP.get(order.getType())); 
        paramJo.put("orderNo", order.getOrderNo()); 

        JSONObject resultJo = null; 
        try{ 
            Map<String,String> urlVariables = new HashMap<String,String>(); 
            urlVariables.put("token", token); 

            HttpEntity<String> requestEntity = new HttpEntity<String>(paramJo.toString(), headers); 
            ResponseEntity<JSONObject> responseEntity =  restTemplate.exchange(apiHysUpdateOrderState, HttpMethod.PUT, requestEntity, JSONObject.class,urlVariables); 
            resultJo = responseEntity.getBody(); 
        }catch(Exception e){ 
            log.error("好藥師同步訂單["+order.getOrderNo()+"]狀態異常:"+e.getMessage()); 
            return; 
        } 

        if(resultJo==null){ 
            log.error("好藥師同步訂單["+order.getOrderNo()+"]狀態失敗"); 
            return; 
        } 

        Integer status = resultJo.getInteger("status"); 
        String msg = resultJo.getString("msg"); 
        if(SUCCESS_STATUS.equals(status)){ 
            log.error("好藥師同步訂單["+order.getOrderNo()+"]狀態"+order.getState()+"成功"); 
        }else{ 
            log.error("好藥師同步訂單["+order.getOrderNo()+"]狀態"+order.getState()+"失敗:"+msg); 
        } 
    } 

    public void updateOrderAmount(OrderRpc order){ 
        String token = getHysToken(); 
        if(StringUtils.isEmpty(token)){ 
            return; 
        } 

         HttpHeaders headers = new HttpHeaders(); 
         MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); 
         headers.setContentType(type); 
         headers.add("Accept", MediaType.APPLICATION_JSON.toString()); 

         double discountAmount = order.getAmount()-order.getActualAmount(); 
         JSONObject paramJo = new JSONObject(); 
         paramJo.put("platform", "jk998"); 
         paramJo.put("discountAmount", discountAmount); 
         paramJo.put("orderMoney", order.getActualAmount()); 
         paramJo.put("orderType", ORDER_TYPE_MAP.get(order.getType())); 
         paramJo.put("orderNo", order.getOrderNo()); 

         JSONObject resultJo = null; 
            try{ 
                Map<String,String> urlVariables = new HashMap<String,String>(); 
                urlVariables.put("token", token); 

                HttpEntity<String> requestEntity = new HttpEntity<String>(paramJo.toString(), headers); 
                ResponseEntity<JSONObject> responseEntity =  restTemplate.exchange(apiHysUpdateOrderAmount, HttpMethod.PUT, requestEntity, JSONObject.class,urlVariables); 
                resultJo = responseEntity.getBody(); 
            }catch(Exception e){ 
                log.error("好藥師同步訂單["+order.getOrderNo()+"]金額異常:"+e.getMessage()); 
                return; 
            } 

            if(resultJo==null){ 
                log.error("好藥師同步訂單["+order.getOrderNo()+"]金額失敗"); 
                return; 
            } 

            Integer status = resultJo.getInteger("status"); 
            String msg = resultJo.getString("msg"); 
            if(SUCCESS_STATUS.equals(status)){ 
                log.error("好藥師同步訂單["+order.getOrderNo()+"]實際金額"+order.getActualAmount()+",優惠金額"+discountAmount+"成功"); 
            }else{ 
                log.error("好藥師同步訂單["+order.getOrderNo()+"]實際金額"+order.getActualAmount()+",優惠金額"+discountAmount+"失敗:"+msg); 
            }   

    } 

}


spring mvc+tomcat源碼分析視頻(鏈接複製在瀏覽器打開)

https://study.163.com/course/courseMain.htm?share=2&shareId=480000001919582&courseId=1209399899&_trace_c_p_k2_=6d81bc445e9c462ab8d6345e40f6b0bf

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章