某度一分钟,问群吹逼一小时。不巴拉巴拉了,直接来吧。。。
这里的跨域请求方法可以做为一个工具类 @Component("httpUtils"),给controller提供方法调用。
上码:
添加注入 RestTemplate 到 bean
@Autowired
private RestTemplate restTemplate;
为了方便查看和分析控制台结果输出,这里加了一个日志的格式,别想aop切面日志搞这么复杂,LoggerFactory来的直接点。
private static Logger logger = LoggerFactory.getLogger("programLog");
跨域过程方法分为如下几步:
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的返回情况:
完。。。。。。