RestFul风格编程
2022/4/27 1:19:11
本文主要是介绍RestFul风格编程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、RestFul
REST 风格: 提倡 URL 地址使用统一的风格设计,从前到后各个单词使用斜杠分开,不使用问号键值对方式携带请求参数,而是将要发送给服务器的数据作为 URL 地址的一部分,以保证整体风格的一致性。 四种基本操作:- GET 用来获取资源
- POST 用来新建资源 add
- PUT 用来更新资源 update
- DELETE 用来删除资源。
1、调用请求
2、编写调用方法
@RequestMapping("/{userName}/{year}") @ResponseBody public String checkChannel(@PathVariable("userName") String userName, @PathVariable("year") String year){ return userName+"_"+year; }
二、RestTemplate
远程调用一个 HTTP 接口时,可以使用Spring框架提供的工具类: Spring 框架提供的一个工具类RestTemplate。
但是在 Spring 5 中已经不再建议使用 RestTemplate
1、常用方法
- getForObject --- optionsForAllow 分为一组,这类方法是常规的 Rest API(GET、POST、DELETE 等)方法调用;
通过 RestTemplate,我们可以非常方便的进行 Rest API 调用。
- exchange:接收一个
RequestEntity
参数,可以自己设置 HTTP method,URL,headers 和 body,返回 ResponseEntity; - execute:通过 callback 接口,可以对请求和返回做更加全面的自定义控制。
2、 接口调用
(1)普通接口调用
String defaultJsonResult = restTemplate.postForObject(ntpUrl,null, String.class); JSONObject object = JSON.parseObject(defaultJsonResult);
JSONObject forObject = restTemplate.getForObject(ibs, JSONObject.class); districts = (List<JSONObject>) forObject.get("districts"); JSONObject object = JSON.parseObject(JSON.toJSONString(districts.get(0))); districts=(List<JSONObject>)object.get("districts");
String flagStr = restTemplate.postForObject(volunUrl, null, String.class); JSONObject object = JSON.parseObject(flagStr); boolean flag1 = (boolean) object.get("data");
Map<String, String> vars = Collections.singletonMap("hotel", "42"); // 通过 GET 方式调用,返回一个 String 值,还可以给 URL 变量设置值(也可通过 uriTemplateHandler 这个属性自定义) String result = restTemplate.getForObject( "https://example.com/hotels/{hotel}/rooms/{hotel}", String.class, vars); String url = "http://127.0.0.1:8080/hello"; JSONObject param = new JSONObject(); //restTemplate 会根据 params 的具体类型,调用合适的 HttpMessageConvert 将请求参数写到请求体 body 中,并在请求头中添加合适的 content-type; // 也会根据 responseType 的类型(本列子中是 JSONObject),设置 head 中的 accept 字段,当响应返回的时候再调用合适的 HttpMessageConvert 进行响应转换 ResponseEntity<JSONObject> responseEntity=restTemplate.postForEntity(url,params,JSONObject.class); int statusCodeValue = responseEntity.getStatusCodeValue(); HttpHeaders headers = responseEntity.getHeaders(); JSONObject body = responseEntity.getBody();
(2)添加 Header 和 Cookie
UriComponents uriComponents = UriComponentsBuilder.fromHttpUrl("127.0.0.1:8080"). path("/test").build(true); URI uri = uriComponents.toUri(); RequestEntity<JSONObject> requestEntity = RequestEntity.post(uri). // 添加 cookie(这边有个问题,假如我们要设置 cookie 的生命周期,作用域等参数我们要怎么操作) header(HttpHeaders.COOKIE,"key1=value1"). // 添加 header header(("MyRequestHeader", "MyValue") accept(MediaType.APPLICATION_JSON). contentType(MediaType.APPLICATION_JSON). body(requestParam); ResponseEntity<JSONObject> responseEntity = restTemplate.exchange(requestEntity,JSONObject.class); // 响应结果 JSONObject responseEntityBody = responseEntity.getBody();
(3)文件上传发送
public Object uplaod(@RequestBody JSONObject params) throws Exception{ final String url = "http://localhost:8888/hello/m3"; // 设置请求头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); // 设置请求体,注意是 LinkedMultiValueMap FileSystemResource resource1 = new FileSystemResource("D:\\dir1\\ss\\pic1.jpg"); FileSystemResource resource2 = new FileSystemResource("D:\\dir1\\ss\\pic2.jpg"); MultiValueMap<String, Object> form = new LinkedMultiValueMap<>(); form.add("file", resource1); form.add("file", resource2); form.add("param1","value1"); HttpEntity<MultiValueMap<String, Object>> files = new HttpEntity<>(form, headers); JSONObject s = restTemplate.postForObject(url, files, JSONObject.class); return s; }
(4)文件上传接收
@RequestMapping("/m3") public Object fileUpload(@RequestParam("file") MultipartFile[] files, HttpServletRequest request) throws Exception { // 携带的其他参数可以使用 getParameter 方法接收 String param1 = request.getParameter("param1"); Response response = new Response(); if (files == null) { response.failure("文件上传错误, 服务端未拿到上传的文件!"); return response; } for (MultipartFile file : files) { if (!file.isEmpty() && file.getSize() > 0) { String fileName = file.getOriginalFilename(); // 参考 FileCopyUtils 这个工具类 file.transferTo(new File("D:\\" + fileName)); logger.info("文件:{} 上传成功...",fileName); } } response.success("文件上传成功"); return response; }
这篇关于RestFul风格编程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南