🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、概述 除独立的传统外部访问机制外,平台内置了SP的外访问机制,并做了简单封装,统一业务调用方式; ## 二、基于RestTemplate用法 ``` ResponseEntity<ValidatingRayframeworkLicense> li = RayRestTemplate.getForEntity("https://yourdns/detail?id={id}", ValidatingRayframeworkLicense.class, "1"); ``` RayRestTemplate为统一的外方接口入口类; ## 三、基于WebClient用法 与RestTemplate相比,WebClient优势如下: * 非阻塞响应式IO,单位时间内有限资源下支持更高的并发量 * 支持使用Java 8 lambda表达式函数 * 同时支持同步、异步与Streaming流式传输场景 GET: ``` WebClient client = getDefautWebClient("http://192.168.1.42/pos"); String token = "B2158F9A-6A1D-4647-922B-9654E7932D87"; Mono<SampleObject> monoResult = client.get().uri("/v2/BaseInfo/GetIdentityList?token={token}", token).accept(MediaType.APPLICATION_JSON).retrieve().bodyToMono(SampleObject.class); // 阻塞式获取数据 Optional<SampleObject> demoObjOptional = monoResult.blockOptional(); //非阻塞式获取数据 monoResult.doOnNext(obj -> { System.out.println(obj.getResultCode()); }).subscribe(); // Flux<SampleObject> fluxResult = client.get().uri("/v2/BaseInfo/GetIdentityList?token={token}", token).accept(MediaType.APPLICATION_JSON).retrieve().bodyToFlux(SampleObject.class); // 阻塞式获取数据 List<SampleObject> objList = fluxResult.collectList().blockOptional().get(); //非阻塞式获取数据 fluxResult.doOnNext(obj ->{ System.out.println(obj.getResultCode()); }).subscribe(); ``` POST: ``` WebClient client = getDefautWebClient("http://192.168.1.42"); String token = "B2158F9A-6A1D-4647-922B-9654E7932D87"; // Map<String, String> formData = new HashMap(); formData.put("password", "123456"); formData.put("userCode", "supermanager"); formData.put("rayTimeStamp", "20211115210917033"); formData.put("raySignature", "wX9CBe9999993f1c88c9355a5ee9a7e3974efcfed9fe"); Mono<ResponseObject> fluxResult = client.post().uri("/api/system/auth/login").header("93dcc865ecbef3643832a38cadbdbd94", "rayHeadSignature").bodyValue(formData).accept(MediaType.APPLICATION_JSON).retrieve().bodyToMono(ResponseObject.class); ResponseObject obj = fluxResult.block(); System.out.println("123" + obj.getBizCode()); ```