RestTemplate后台跨域请求简明例子

某度一分钟,问群吹逼一小时。不巴拉巴拉了,直接来吧。。。

 

这里的跨域请求方法可以做为一个工具类 @Component("httpUtils"),给controller提供方法调用。

上码:

添加注入 RestTemplate 到 bean

@Autowired
private RestTemplate restTemplate;

为了方便查看和分析控制台结果输出,这里加了一个日志的格式,别想aop切面日志搞这么复杂,LoggerFactory来的直接点。

private static Logger logger = LoggerFactory.getLogger("programLog");

跨域过程方法分为如下几步:

  • 设置请求头
  • 设置请求体
  • 组合请求头和请求体为请求对象requestEntity
  • 通过跨域restTemplate远程请求接口
  • 返回远程接口响应结果
    public String getUrlReturn(String url, Map headerMap, Map paramsMap) {
        // 设置请求头:遍历headerMap请求头集合,设置到requestHeaders
        HttpHeaders requestHeaders = new HttpHeaders();
        for (String headerName : headerMap.keySet()) {
            requestHeaders.add(headerName, headerMap.get(headerName));
        }
        // 设置请求体:遍历paramsMap参数集合,设置到requestBody
        MultiValueMap requestBody = new LinkedMultiValueMap<>();
        for (String params : paramsMap.keySet()) {
            requestBody.add(params, paramsMap.get(params));
        }
        // 组合请求头和请求体为请求对象requestEntity
        HttpEntity> requestEntity = new HttpEntity<>(requestBody, requestHeaders);
        String returnStr = null;
        try {
            // 通过跨域restTemplate远程请求接口,返回远程接口响应结果
            returnStr = this.restTemplate.postForObject(url, requestEntity, String.class);
            logger.info("HttpUtils|getUrlReturn|url= + " + url + "|returnStr=" + returnStr);
            return returnStr;
        } catch (Exception e) {
            logger.info("HttpUtils|getUrlReturn|服务器通信错误|Exception=" + e.getMessage());
        }
        return returnStr;
    }

在yml中添加你的远程接口链接:

在controller中通过 @Value 注解获取该接口进行调用:

@Value("${EDIT_USER_MESSAGE_STATUS}")
private String EDIT_USER_MESSAGE_STATUS;

下面在controller中简单的写个方法来调用这个接口:参数和请求头需要和远程接口对应

    @ApiOperation(notes = "修改信息状态", value = "修改信息状态")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userMessageId", value = "信息ID", paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "tbStatus", value = "状态", paramType = "query", dataType = "String")
    })
    @RequestMapping(value = "/editStatus", method = RequestMethod.POST, produces = "application/json;chartset=UTF-8")
    public JSONObject editStatus(HttpServletRequest request, String userMessageId, @RequestParam(required = false) String tbStatus) {
        Map header = new HashMap<>();
        Map params = new HashMap<>();
        // 设置远程接口请求参数
        params.put("userMessageId", userMessageId);
        params.put("tbStatus", tbStatus);
        // 远程调用chat接口修改数据
        String jsonResult = this.httpUtil.getUrlReturn(EDIT_USER_MESSAGE_STATUS, header, params);
        JSONObject jr = JSON.parseObject(jsonResult); // String转换为JSONObject格式
        logger.info("HttpUtils|getUrlReturn|JsonResult= " + jr.getString("statusCode"));
        return jr;
    }

我们来看一下控制台返回的结果:我们可以看到远程接口响应的结果 returnStr 和后台获取结果 JsonResult 的情况

我们也可以看看swagger的返回情况:

RestTemplate后台跨域请求简明例子_第1张图片

 

完。。。。。。

你可能感兴趣的:(SpringBoot,2.x)