编程语言
首页 > 编程语言> > RestFul风格编程

RestFul风格编程

作者:互联网

一、RestFul

REST 风格:         提倡 URL 地址使用统一的风格设计,从前到后各个单词使用斜杠分开,不使用问号键值对方式携带请求参数,而是将要发送给服务器的数据作为 URL 地址的一部分,以保证整体风格的一致性。   四种基本操作:

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、常用方法

       通过 RestTemplate,我们可以非常方便的进行 Rest API 调用。

 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;
    }

 

标签:调用,String,JSONObject,编程,restTemplate,风格,file,new,RestFul
来源: https://www.cnblogs.com/xwdnd/p/16195660.html