String之Template的运用详情

RestTemplate 的简单使用:

RestTemplate提供高度封装的接口,可以让我们非常方便地进行Rest API调用.常见的方法如下:

简单来说RestTemplate是一个请求方法

表格:RestTemplate 的方法

实例代码:(第一种:)

HttpHeaders headers = new HttpHeaders()
ResponseEntity<Map> response = restTemplate.postForEntity(YuantongConfig.YTO_Logistics_Api, request, Map.class, new Object[0]);

实例代码:(第二种:)

/**
*通过@Bean来注入容器来实现方法
*/
package com.czxy.ssm.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * RestTemplate工具类,主要用来提供RestTemplate对象
 */
@Configuration//加上这个注解作用,可以被Spring扫描
public class RestTemplateConfig {
    /**
     * 创建RestTemplate对象,将RestTemplate对象的生命周期的管理交给Spring
     */
    @Bean
    public RestTemplate restTemplate(){
       // RestTemplate restTemplate = new RestTemplate();
       //设置中文乱码问题方式一
       // restTemplate.getMessageConverters().add(1,new StringHttpMessageConverter(Charset.forName("UTF-8")));
       // 设置中文乱码问题方式二
       // restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8)); // 支持中文编码
        return new RestTemplate();
    }
    /方法二/
        /**
     * ClientHttpRequestFactory:客户端请求工厂
     * */
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        RestTemplate restTemplate=new RestTemplate(factory);
        //MyInterceptor 拦截器
        restTemplate.setInterceptors(Collections.singletonList(new MyInterceptor()));
        return restTemplate;
    }
    @Bean
    public ClientHttpRequestFactory requestFactory(){
        SimpleClientHttpRequestFactory factory=new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(5000);
        factory.setConnectTimeout(15000);
        //设置代理
        factory.setProxy(null);
        return factory;
    }
}
package com.czxy.ssm.controller;

import com.czxy.ssm.pojo.Goods;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

/**
 * 本项目不连接数据库,通过RestTemplate发出get、post、put、delete请求,
 * 请求Goods-project项目中controller的方法
 */
@RestController
@RequestMapping("/rest")
public class RestTempController {

    // 从Spring的容器中获取restTemplate
    @Autowired
    private RestTemplate restTemplate;


    /**
     * 通过/id查询
     * http://localhost:8090/goods2 -->分页查找
     */
    @GetMapping("/{id}")
    public ResponseEntity<String> findByPage(@PathVariable Integer id){
        /**
         * 第一个参数:url
         * 第二个参数:返回值类型
         */
        ResponseEntity<String> entity = restTemplate.getForEntity("http://localhost:8080/goods2/"+id, String.class);
        System.out.println("状态码:"+entity.getStatusCode());
        System.out.println("响应体"+entity.getBody());
        return ResponseEntity.ok(entity.getBody());
    }


    /**
     * 添加数据
     */
    @PostMapping
    public ResponseEntity<String> addGoods(@RequestBody Goods goods){
        /**
         * 第一个参数:url
         * 第二个参数:数据
         * 第三个参数:返回值类型
         */
        ResponseEntity<String> entity = restTemplate.postForEntity("http://localhost:8080/goods2", goods, String.class);
        return entity;
    }


    /**
     * 修改数据
     */
    @PutMapping
    public ResponseEntity<String> updateGoods(@RequestBody Goods goods){
        // 第一个参数:url
        // 第二个参数:对象,数据
        restTemplate.put("http://localhost:8080/goods2",goods);

//      return new ResponseEntity<>("成功", HttpStatus.OK);
        return ResponseEntity.ok("修改成功");
    }

    /**
     * 根据/id删除
     */
    @DeleteMapping("/{id}")
    public ResponseEntity<String> deleteGoods(@PathVariable("id") Integer id){
        restTemplate.delete("http://localhost:8080/goods2/"+id,String.class);
        return ResponseEntity.ok("删除成功");
    }
} 

代码参考:

RestTemplate使用详解_BigMoM1573的博客-CSDN博客

https://www.cnblogs.com/54chensongxia/p/11414923.html

要导入的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

2.6:调用接口常用的几个方法:

  1. 数据转换为JSON数据 :JSON.toJSONString(ytooCancel);
  2. 签名:encryptSignForOpen
  3. 封装参数放回参数:Map<String, String> map = new HashMap<>();
  4. 当前的时间戳:String.valueOf(System.currentTimeMillis())(String.valueOf:返回对象的值)
  5. 请求头:HttpHeaders headers = new HttpHeaders();
  6. 内容类型:ContentType(内容的类型)
  7. 请求的实体:HttpEntity(放请求头和请求内容的)
  8. 请求的模版:restTemplate.postForEntity(post请求)

代码展示:

        String jsonString = JSON.toJSONString(ytooCancel);
        System.out.println("jsonString=="+jsonString);
        String data = jsonString +YuantongConfig.YTO_Logistics_Method  + YuantongConfig.YTO_Edition;
        //签名
        String sign = encryptSignForOpen.encryptSignForOpen(data,YuantongConfig.YTO_Logistics_Secret);
        //封装参数
        Map<String, String> map = new HashMap<>();
        //获取时间戳
        map.put("timestamp", String.valueOf(System.currentTimeMillis()));
        map.put("param", jsonString);
        map.put("sign", sign);
        map.put("format", "JSON");
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.parseMediaType("application/json; charset=UTF-8"));
        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity(map, headers);
        ResponseEntity<Map> response = restTemplate.postForEntity(YuantongConfig.YTO_Logistics_Api, request, Map.class, new Object[0]);
        Map orderCancel = response.getBody();
        System.out.println("orderCancel="+orderCancel);

拦截器:
 

package com.example.yuantong.config;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;

import java.io.IOException;

/**
 * 拦截器
 * */
public class MyInterceptor implements ClientHttpRequestInterceptor {
    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
       HttpHeaders headers= request.getHeaders();
       /**
        * 1.拦截所以请求————带上请求头————在去请求
        * */
       //HttpHeaders.USER_AGENT:用户代理
        headers.add(HttpHeaders.USER_AGENT,
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36");
        return execution.execute(request, body);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT空门:门主

你的鼓励是我发稿的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值