• 【JAVA springframework.http】如何发送HTTP请求


    Springboot之restTemplate

    同步客户端执行HTTP请求,在底层HTTP客户端库(如JDK HttpURLConnection、Apache HttpComponents等)上公开一个简单的模板方法API。RestTemplate通过HTTP方法为常见场景提供了模板,此外还提供了支持不太常见情况的通用交换和执行方法。 **RestTemplate通常用作共享组件。然而,它的配置不支持并发修改,因此它的配置通常是在启动时准备的。**如果需要,您可以在启动时创建多个不同配置的RestTemplate实例。如果这些实例需要共享HTTP客户端资源,它们可以使用相同的底层ClientHttpRequestFactory。 注意:从5.0开始,这个类处于维护模式,只有对更改和错误的小请求才会被接受。请考虑使用org.springframework.web.react .client. webclient,它有更现代的API,支持同步、异步和流场景。

    @Configuration
    public class RemoteCallConfig {
    
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    public Result doHandlePostJson(String restUri, String jsonData)
                throws Exception {
    
            Result result = null;
    
            try {
    
                // logger记录
                log.info("doHandlePostJson request restUri:" + restUri
                        + " sendData:" + jsonData);
    
                HttpHeaders headers = new HttpHeaders();
                headers.setContentType(MediaType.APPLICATION_JSON);
                HttpEntity request = new HttpEntity(jsonData, headers);
    
                // 发送http服务请求
                ResponseEntity<String> response = restTemplate.postForEntity(
                        restUri, request, String.class);
    
                // 判断返回结果
                if (response.getStatusCode() == HttpStatus.OK) {
    
                    // logger记录
                    log.debug("doHandlePostJson restUri response success,interfaceUri:"
                            + restUri);
    
                    // 获得返回结果
                    String repData = response.getBody();
    
                    // logger记录
                    log.info("doHandlePostJson restUri response success,return data:"
                            + repData);
    
                    // 返回成功
                    result = Result.succeed(repData, "");
    
                } else {
    
                    // logger记录
                    log.info("doHandlePostJson restUri response error,interfaceUri:"
                            + restUri + " http status:" + response.getStatusCode());
    
                    // 返回产品Gateway通讯异常错误
                    result = Result.failed("请求外部系统异常");
                }
    
            } catch (ResourceAccessException e) {
    
                // logger记录
                log.error("doHandlePostJson restUri ResourceAccessException:", e);
    
                // 返回通讯异常错误
                result = Result.failed("请求外部系统超时");
    
            } catch (Exception e) {
    
                // logger记录
                log.error("doHandlePostJson restUri Exception:", e);
    
                // 返回通讯异常错误
                result = Result.failed("请求外部系统未知异常");
            } finally {
    
                // 关闭
            }
    
            return result;
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69

    package org.springframework.http;

    HttpHeaders

    public class HttpHeaders implements MultiValueMap, Serializable

    HttpEntity

    public class HttpEntity

    HttpStatus

    public enum HttpStatus

    Java发送http请求可以使用Spring提供的RestTemplate,使用的基本步骤如下:
    - 注册RestTemplate到Spring容器
    - 调用RestTemplate的API发送请求,常见方法有:
      - getForObject:发送Get请求并返回指定类型对象
      - PostForObject:发送Post请求并返回指定类型对象
      - put:发送PUT请求
      - delete:发送Delete请求
      - exchange:发送任意类型请求,返回ResponseEntity
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在微服务中,如果用到了注册中心,那么使用open-feign进行远程调用会更好,不使用RestTemplate了。

    Feign底层发起http请求,依赖于其它的框架。其底层支持的http客户端实现包括:

    • HttpURLConnection:默认实现,不支持连接池
    • Apache HttpClient :支持连接池
    • OKHttp:支持连接池

    因此我们通常会使用带有连接池的客户端来代替默认的HttpURLConnection。比如,我们使用OK Http.

    OpenFeign只会在FeignClient所在包的日志级别为DEBUG时,才会输出日志。而且其日志级别有4级:

    • NONE:不记录任何日志信息,这是默认值。
    • BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
    • HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
    • FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。
      Feign默认的日志级别就是NONE,所以默认我们看不到请求日志。
  • 相关阅读:
    Python实时获取steam游戏数据
    css的继承性
    【unity3D-网格编程】01:Mesh基础属性以及用代码创建一个三角形
    机器学习如何做到疫情可视化——疫情数据分析与预测实战
    两个有序表的合并(三种方法)
    MYSQL入门与进阶(四)
    React之路由的基本操作
    【JavaScript】制作一个抽奖转盘页面
    15W SIP木质网络音箱
    【VMware虚拟机中ubuntu系列】—— 在虚拟机中使用本机摄像头的详细教程与常见问题分析及解决
  • 原文地址:https://blog.csdn.net/weixin_46689011/article/details/133929319