前端不想和后端绑定啦,它想蹭百家!系统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<String, Object> mapParam = null; if(params instanceof Map) { mapParam = (Map<String, Object>) params; }else{ mapParam = BeanUtils.beanToMap(params);//将参数转化为map对象(只能接受基本数据类型) } return restTemplate().getForObject(url,String.class,mapParam); } //post方式获取远程资源 public static String postRestObject(String url,MultiValueMap<String, Object> params) { return restTemplate().postForObject(url,params,String.class); } //解析远程资源为页面内容对象 public static VoPageContent getVoPageContent(String restResult,Class clazz) { ResponseResult result = JSONObject.parseObject(restResult, ResponseResult.class); Map<String,Object> map = (Map<String, Object>) 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<String, Object> map = new LinkedMultiValueMap<>(); map.add("userid", userid); RestTemplateUtils.postRestObject("http://localhost:10000/group/logout", map); }最后,郑重声明,我给大家的只是一个引,真正具体的使用,需要根据实际需求进行选择性详细学习