前端不想和后端绑定啦,它想蹭百家!系统A有意系统B,它想来一次亲密接触!
于是乎,跨域访问火了!远程调用火了!那么,最简单使用的跨域访问和远程调又是什么呢?请看下面道来。
基于cors的跨域访问:
上代码:
@RequestMapping(method = RequestMethod.DELETE)
@CrossOrigin(origins = {"http://localhost:10003"}, methods = RequestMethod.DELETE)
public ResponseResult deletePartnerProfile(String ids) {
ResponseResult responseResult = super.buildResponseResult(ids);
if(ids == null || !ids.matches("[\\d+,\\d*]+,")) {
return responseResult.result(HttpStatus.BAD_REQUEST);
}
//执行删除操作
getPartnerProfileService().deletePartnerProfile(ids);
return responseResult.result(HttpStatus.OK, "success");
}
找关键的时间到了!看仔细,看仔细,是的呢,如果你注意到了@CrossOrigin,那么恭喜你,你已经会跨域访问了。
@CrossOrigin是springMVC中提供的用于实现跨域访问的注解,它等同用拦截器在响应头中添加Access-Control-Allow-Origin: #{URL}。客服端想服务器发送请求时,第一次请求用于获取权限,当服务器返回的响应中含有上述内容时,则再次发出请求,取得资源。
基于RestTempalte的远程调用
上代码:
(先分享一下自己写的工具类。。。。)
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.group.entity.vo.VoPageContent;
import com.pparking.base.commons.domain.PageCondition;
import com.pparking.core.commons.domain.ResponseResult;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.util.Assert;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
public class RestTemplateUtils {
//获取restTemplate对象,并设置字符串为UTF-8
public static RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
return restTemplate;
}
//get方式获取远程资源
public static String getRestObject(String url,Object params) {
Map mapParam = null;
if(params instanceof Map) {
mapParam = (Map) params;
}else{
mapParam = BeanUtils.beanToMap(params);//将参数转化为map对象(只能接受基本数据类型)
}
return restTemplate().getForObject(url,String.class,mapParam);
}
//post方式获取远程资源
public static String postRestObject(String url,MultiValueMap params) {
return restTemplate().postForObject(url,params,String.class);
}
//解析远程资源为页面内容对象
public static VoPageContent getVoPageContent(String restResult,Class clazz) {
ResponseResult result = JSONObject.parseObject(restResult, ResponseResult.class);
Map map = (Map) result.getBody();
List list = null;
Assert.notNull(map,"停车场验证错误");
if(map.get("rows") != null) {
list = JSONArray.parseArray(map.get("rows").toString(), clazz);
}
Long total = null;
if(map.get("total") !=null) {
total = JSON.parseObject(map.get("total").toString(), Long.class);
}
PageCondition pageCondition = null;
if(map.get("condition") !=null) {
pageCondition = JSONArray.parseObject(map.get("condition").toString(), PageCondition.class);
}
Long totalMoney = null;
if(map.get("totalMoney") !=null) {
totalMoney = JSONArray.parseObject(map.get("totalMoney").toString(), Long.class);
}
return new VoPageContent<>(total,pageCondition,list,totalMoney) ;
}
}
借用我的工具类后,一切so 简单。。。
public void logout(Long userid) {
String username = getGroup(userid).getUsername();
cacheManager.getCache("groupCache").evict(username);
MultiValueMap map = new LinkedMultiValueMap<>();
map.add("userid", userid);
RestTemplateUtils.postRestObject("http://localhost:10000/group/logout", map);
}
最后,郑重声明,我给大家的只是一个引,真正具体的使用,需要根据实际需求进行选择性详细学习