通用框架——通过RestTemplate调用irds组件接口获取数据

1. 设置RestTemplate请求工具

在common文件夹下创建HTTPRequestRes.java(一般通用的工具或方法都创建在海星的common文件夹下)
在该文件内设置RestTemplate请求工具
代码如下:

package com.hikvision.isc.common.utils;

import com.hikvision.starfish.core.response.business.BaseResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import com.alibaba.fastjson.JSONObject;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate;

@Component
public class HTTPRequestRes {

    private static final Logger logger = LoggerFactory.getLogger(HTTPRequestRes.class);
    public static final String ACCEPT = "Accept";
    public static final String CONTENT_ENCODING = "Content-Encoding";
    public static final String CONTENT_TYPE = "Content-Type";
    private static BaseResponse baseResponse = new BaseResponse();
    @Autowired
    private RestTemplate restTemplate;

    public  BaseResponse RestTemplate(String userId, String url, HttpMethod httpMethod, Object content, Class t) throws Exception {
        if (StringUtils.isEmpty(url)) {
            return baseResponse;
        }
        HttpHeaders headers = getHttpHeaders(userId);
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity entity = new HttpEntity<>(content, headers);
        ResponseEntity responseEntity = restTemplate.exchange(url, httpMethod, entity, String.class);
        String ret = responseEntity.getBody();
        baseResponse = JSONObject.parseObject(ret, BaseResponse.class);

        return baseResponse;
    }

    public static HttpHeaders getHttpHeaders(String userId) {
        HttpHeaders headers = new HttpHeaders();
        headers.add(ACCEPT, "application/json");
        headers.add(CONTENT_ENCODING, "UTF-8");
        headers.add(CONTENT_TYPE, "application/json; charset=UTF-8");
        headers.add("userId",userId);
        return headers;
    }
}
 
 

2. 调用RestTemplate请求工具请求irds组件的相关接口

以irds组件的以下接口为例:
通用框架——通过RestTemplate调用irds组件接口获取数据_第1张图片
(1)在service.impl文件夹下创建任意文件
在service.impl文件夹下创建MyIrdsService,
在代码中自定义方法,设置参数,通过调用RestTemplate请求方法进行请求

package com.hikvision.isc.module.business.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.hikvision.isc.common.utils.HTTPRequestRes;
import com.hikvision.starfish.core.response.business.BaseResponse;
import com.hikvision.starfish.irds.response.PageData;
import com.hikvision.starfish.irds.service.IIrdsService;
import com.hikvision.starfish.irds.vo.RegionQueryReqVo;
import com.hikvision.starfish.irds.vo.RegionVo;
import com.hikvision.starfish.irds.vo.SubRegionQueryReqVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import com.hikvision.isc.common.errorcode.DefaultErrorCode;

import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class MyIrdsService {
    private static Logger logger = LoggerFactory.getLogger(MyIrdsService.class);

    private static final String IRDS = "irds";
    private static final String IRDS_CAMERA_LIST = "/irds/api/v1/camera/advance/cameraList";


    @Autowired
    private HTTPRequestRes httpRequestRes;

    /**根据监控点名称获取列表*/
    public BaseResponse queryCameraListByName(String cameraName, String userId){
        BaseResponse baseResponse = new BaseResponse();
        
        //拼接完整的相应接口的完整请求地址
        String url = "http://" + IRDS + "." + IRDS + IRDS_CAMERA_LIST;
        try{
            //在这里设置接口的请求参数
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("pageNo", 1);         //起始页
            jsonObject.put("pageSize", 1000);   //指定每页的记录数据量大小
            jsonObject.put("cameraName", cameraName);  //监控点名称
            jsonObject.put("isCascade", 2);     //是否级联, 0:非级联, 1:级联, 2:不限

            //userId:用户名  url:接口请求地址  HttpMethod.POST:请求方式(可以为GET、POST、PUT请求等)  jsonObject:请求参数
            //调用RestTemplate请求工具,传入相应参数进行请求
            baseResponse = httpRequestRes.RestTemplate(userId, url, HttpMethod.POST, jsonObject, JSONObject.class);
            return baseResponse;
        }catch (Exception e){
            baseResponse = exection(url + e.getMessage());
            return baseResponse;
        }
    }

    public BaseResponse exection(String message) {
        BaseResponse baseResponse = new BaseResponse();
        baseResponse.setCode("-1");
        baseResponse.setMsg(message);
        logger.error("irds访问失败", message);
        return baseResponse;
    }
}

3. 定义service接口以及接口实现类

在service中定义接口
通用框架——通过RestTemplate调用irds组件接口获取数据_第2张图片
在接口实现类中重写接口中的方法,调用2中的方法即可
通用框架——通过RestTemplate调用irds组件接口获取数据_第3张图片

4. 定义controller层

通用框架——通过RestTemplate调用irds组件接口获取数据_第4张图片

5. 进行测试

通用框架——通过RestTemplate调用irds组件接口获取数据_第5张图片
通用框架——通过RestTemplate调用irds组件接口获取数据_第6张图片
调用成功,成功从irds组件获得指定的数据