跨域访问与远程调用的简洁之道

前端不想和后端绑定啦,它想蹭百家!系统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);
    }
最后,郑重声明,我给大家的只是一个引,真正具体的使用,需要根据实际需求进行选择性详细学习


猜你喜欢

转载自blog.csdn.net/qq_35813653/article/details/80606490