java之RestTemplate的访问应用

  一、REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

  目前在三种主流的 Web服务实现方案中,因为REST模式的Web服务与复杂的SOAP和 XML-RPC对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务进行图书查找; 雅虎提供的Web服务也是REST风格的。
  二、RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。调用RestTemplate的默认构造函数,RestTemplate对象在底层通过使用java.net包下的实现创建HTTP 请求,可以通过使用ClientHttpRequestFactory指定不同的HTTP请求方式。
  三、这里主要介绍几种RestTemplate的用法
  1)第一种post请求
  public ResponseEntity doPost(String url, Map<String,Object> map) {
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
        Gson gson = new Gson();
        HttpEntity<String> httpEntity = new HttpEntity(gson.toJson(map), httpHeaders);
        ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.POST, httpEntity, Object.class);
        return responseEntity;
    }

  说明:这种方式主要是用于post数据的传输,因为rest的简洁性,在使用上面也会得到恨到的应用。

  2)第二种get请求

   public ResponseEntity doGet(String url) {
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.TEXT_HTML);
        HttpEntity<String> httpEntity = new HttpEntity(httpHeaders);
        ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, Object.class);
        return responseEntity;
    }

  说明:get请求没有太大的解释,基本上面的设置都是这样

  3)第三种from方式

  public ResponseEntity doFrom(String url, LinkedMultiValueMap<String, Object> map) {
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        HttpEntity<String> httpEntity = new HttpEntity(httpHeaders);
        ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.POST, httpEntity, Object.class);
        return responseEntity;
    }

  说明:表单的方式使用虽然不常见,但是应用的时候也需要注意几点,数据形式LinkedMultiValueMap和HashMap不同存储方式的是name=rest&password=123。

  而Content-Type的方式为application/x-www-form-urlencoded。这种表单处理方式,对于数据的处理上面要特别注意

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OAuth2是一种授权协议,用于保护API和应用程序RestTemplate是Spring框架提供的一个用于发送HTTP请求的工具类。使用RestTemplate调用OAuth2授权的服务涉及到以下步骤: 1. 获取访问令牌(access token):在OAuth2授权流程中,客户端需要向授权服务器发送请求,获取访问令牌。这个过程需要传递客户端ID和密钥等信息。可以使用RestTemplate发送HTTP请求来实现这个过程。 2. 使用访问令牌访问受保护的资源:获取访问令牌之后,客户端可以使用这个令牌访问OAuth2保护的资源。在访问这些资源时,客户端需要在HTTP请求头中传递访问令牌。同样可以使用RestTemplate发送HTTP请求来实现这个过程。 下面是一个使用RestTemplate调用OAuth2授权的服务的示例: ``` // 创建RestTemplate实例 RestTemplate restTemplate = new RestTemplate(); // 发送获取访问令牌的请求 String url = "http://oauthserver.com/token"; MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); params.add("grant_type", "client_credentials"); params.add("client_id", "your_client_id"); params.add("client_secret", "your_client_secret"); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers); ResponseEntity<TokenResponse> response = restTemplate.postForEntity(url, request, TokenResponse.class); // 获取访问令牌 String accessToken = response.getBody().getAccessToken(); // 使用访问令牌访问受保护的资源 url = "http://protectedresource.com/api/v1/users"; headers = new HttpHeaders(); headers.setBearerAuth(accessToken); request = new HttpEntity<>(headers); response = restTemplate.exchange(url, HttpMethod.GET, request, UserListResponse.class); // 处理响应结果 List<User> userList = response.getBody().getUsers(); ``` 在这个示例中,我们首先创建了一个RestTemplate实例。然后,我们发送获取访问令牌的请求,使用postForEntity方法发送HTTP POST请求,传递授权服务器的URL、请求参数和请求头信息。在响应中,我们解析访问令牌,并将其存储在accessToken变量中。 接下来,我们使用RestTemplate访问受保护的资源。我们使用exchange方法发送HTTP GET请求,传递受保护资源的URL和请求头信息。在响应中,我们解析受保护资源的响应结果,并将其存储在userList变量中。 这是一个基本的示例,你可以根据实际需求进行修改和扩展。需要注意的是,这个示例中并没有处理访问令牌的过期和刷新等问题,你需要根据实际情况进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值