• spring boot下java调用远程接口,get方式和post方式


    package net.vtstar.cloudmes.business.herc.service;
    
    import com.alibaba.fastjson.JSONObject;
    import net.vtstar.cloudmes.business.herc.domain.Oee;
    import net.vtstar.cloudmes.business.herc.domain.OeeResult;
    import net.vtstar.cloudmes.business.herc.domain.SyncProgram;
    import net.vtstar.cloudmes.business.herc.properties.HercProperties;
    import net.vtstar.cloudmes.business.mobileterminal.domain.ProductionCompleteVO;
    import net.vtstar.utils.DateUtils;
    import net.vtstar.utils.asserts.ParamAssert;
    import net.vtstar.utils.domain.Return;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.io.FileSystemResource;
    import org.springframework.http.*;
    import org.springframework.stereotype.Service;
    import org.springframework.util.LinkedMultiValueMap;
    import org.springframework.util.MultiValueMap;
    import org.springframework.web.client.RestTemplate;
    import org.springframework.web.util.UriComponentsBuilder;
    
    import java.io.File;
    import java.lang.reflect.Field;
    import java.net.URI;
    import java.net.URISyntaxException;
    import java.util.Collections;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    
    @Service
    public class HercService {
    
        @Autowired
        private HercProperties hercProperties;
    
        @Autowired
        private RestTemplate restTemplate;
    
        private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
    
        /**
         * @param syncProgram 同步程序需要的参数
         */
        public void syncProgram(SyncProgram syncProgram) {
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.MULTIPART_FORM_DATA);
            headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON_UTF8));
    
            MultiValueMap<String, Object> body = getMultiValueMap(syncProgram);
    
            HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(body, headers);
            ResponseEntity<Return> responseEntity = restTemplate.exchange(hercProperties.getSyncProgram(), HttpMethod.POST, httpEntity, Return.class);
            ParamAssert.state(responseEntity.getStatusCode() == HttpStatus.OK, "同步程序异常");
            Return r = responseEntity.getBody();
            ParamAssert.state(600 == r.getCode(), r.getMessage());
        }
    
        /**
         * 获取herc系统中oee内容
         */
        public OeeResult getTimePerformanceYieldRateOee(Oee oee) {
            // url采用了参数解析的方式, 参考herc.url.time-performance-yield-rate-oee
            ResponseEntity<Return> response = restTemplate.getForEntity(hercProperties.getTimePerformanceYieldRateOee(), Return.class, getValueMap(oee));
            ParamAssert.state(response.getStatusCode() == HttpStatus.OK, "获取oee失败");
            Return r = response.getBody();
            ParamAssert.state(600 == r.getCode(), r.getMessage());
            Map<String, Object> map = (Map<String, Object>) r.getData();
            return new JSONObject(map).toJavaObject(OeeResult.class);
        }
    
        /**
         * 将派工单报工同步到herc系统
         */
        public void syncDispatchListData(ProductionCompleteVO productionCompleteVO) {
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
            RequestEntity<ProductionCompleteVO> requestEntity;
            try {
                requestEntity = new RequestEntity<>(productionCompleteVO, httpHeaders, HttpMethod.POST, new URI(hercProperties.getSyncDispatchListData()));
            } catch (URISyntaxException e) {
                e.printStackTrace();
                throw new IllegalStateException("同步程序url配置错误,请联系管理员");
            }
            ResponseEntity<Return> responseEntity = restTemplate.exchange(requestEntity, Return.class);
            ParamAssert.state(responseEntity.getStatusCode() == HttpStatus.OK, "同步派工单参数失败");
            Return r = responseEntity.getBody();
            ParamAssert.state(600 == r.getCode(), r.getMessage());
        }
    
        /**
         * 用户同步派工单接口
         */
        public Map getUserPlanning(String equipNo) {
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
    
            RequestEntity<MultiValueMap<String, Object>> requestEntity = null;
    
            UriComponentsBuilder requestUri = UriComponentsBuilder.fromUri(URI.create(hercProperties.getSyncWorkOrderCount()))
                    .queryParam("empNo", equipNo);
    
            ResponseEntity<Return> r = restTemplate.getForEntity(requestUri.toUriString(), Return.class);
            Map<String, Object> map = (Map<String, Object>) r.getBody().getData();
            return map;
        }
    
    
        /**
         * 将object转换成HashMap封装的对象
         * 用于 HTTP GET请求填充参数时使用
         * HTTP GET 请求uri类型   /api/xxxx/{x1}/{x2} , 或 /api/xxxx?x1={x1}&x2={x2}
         */
        private Map<String, Object> getValueMap(Object object) {
            Class objClass = object.getClass();
            Map<String, Object> result = new HashMap<>();
    
            Field[] fields = objClass.getDeclaredFields();
            for (Field field : fields) {
                field.setAccessible(true);
                try {
                    if (field.getType() == Date.class) {
                        result.put(field.getName(), DateUtils.parseDateToString((Date) field.get(object), DATE_FORMAT));
                    } else {
                        result.put(field.getName(), field.get(object));
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
            return result;
        }
    
        /**
         * 将object转换成MultiValueMap封装的对象
         */
        private MultiValueMap<String, Object> getMultiValueMap(Object object) {
            Class objClass = object.getClass();
            MultiValueMap<String, Object> result = new LinkedMultiValueMap<>();
    
            Field[] fields = objClass.getDeclaredFields();
            for (Field field : fields) {
                field.setAccessible(true);
                try {
                    if (field.getType() == File.class) {
                        FileSystemResource resource = new FileSystemResource((File) field.get(object));
                        result.add(field.getName(), resource);
                    } else if (field.getType() == File[].class) {
                        File[] files = (File[]) field.get(object);
                        for (File file : files) {
                            FileSystemResource fileSystemResources = new FileSystemResource(file);
                            result.add(field.getName(), fileSystemResources);
                        }
                    } else {
                        result.add(field.getName(), field.get(object));
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
            return result;
        }
    
    }

    以上是核心业务代码,使用

    restTemplate方式调用远程java接口

    package net.vtstar.cloudmes.business.herc.properties;
    
    import lombok.Getter;
    import lombok.Setter;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    @ConfigurationProperties(prefix = "herc.url")
    public class HercProperties {
    
        @Getter
        @Setter
        // 程序同步
        private String syncProgram;
    
        @Getter
        @Setter
        // 获取oee、时间稼动率、性能稼动率、良品率、OEE
        private String timePerformanceYieldRateOee;
    
    
        @Getter
        @Setter
        //将提交程序同步到herc系统
        private String syncDispatchListData;
    
        @Getter
        @Setter
        //用户派工单接口
        private String syncWorkOrderCount;
    
    }
    herc.url.sync-program=http://22b1964l16.iok.la/api/CNCSystem/ProgramSynchronization
    herc.url.time-performance-yield-rate-oee=http://22b1964l16.iok.la/api/CNCSystem/OEE?processDur={processDur}&startTime={startTime}&endTime={endTime}&equipNo={equipNo}
    herc.url.sync-dispatch-list-data=http://22b1964l16.iok.la/api/CNCSystem/WorkOrderData
    herc.url.sync-work-order-count=http://22b1964l16.iok.la/api/CNCSystem/WorkOrderCount

    以上是配置远程接口

  • 相关阅读:
    leetcode 237: Delete Node in a Linked List
    谈谈地图中的道路绘制
    关于double类型数字相加位数发生变化的问题
    iOS_25_彩票设置的cell的数据源模型的封装
    session_start() [function.session-start]:
    Android系统Gps分析(一)【转】
    Android4.4 GPS框架分析【转】
    GPIO设备虚拟文件结点的创建【转】
    高通MSM8255 GPS 调试分析&&Android系统之Broadcom GPS 移植【转】
    和菜鸟一起学android4.0.3源码之硬件gps简单移植【转】
  • 原文地址:https://www.cnblogs.com/xuehu666/p/12105658.html
Copyright © 2020-2023  润新知