RestTemplate

RestTemplate是什么?

​ 是一个可以在服务器之间相互调用,发送http请求的工具包,封装了其他有相同功能的工具包,使用更加简洁方便

使用

所需依赖

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

解决中文乱码问题

@Configuration
public class RestTemplateConfig {

    //第二种 不用配置类,可以直接在SpringBoot 启动类注册
    @Bean
    public RestTemplate restTemplate() {
        // 默认的RestTemplate,底层是走JDK的URLConnection方式。
        // 设置中文乱码问题方式一
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(1,new StringHttpMessageConverter(Charset.forName("UTF-8")));
        // 设置中文乱码问题方式二
        //        restTemplate.getMessageConverters().set(1,
//                new StringHttpMessageConverter(StandardCharsets.UTF_8)); // 支持中文编码
        return restTemplate;
    }

}

访问中国天气出现乱码

请求接口: http://wthrcdn.etouch.cn/weather_mini?city=北京

增加依赖

 <dependency>
     <groupId>org.apache.httpcomponents</groupId>
     <artifactId>httpclient</artifactId>
     <version>4.4</version>
 </dependency>

修改配置类

//获得的返回数据是经过 GZIP 压缩过的, 而默认的URLConnection无法支持所以考虑创建使用httpClient的RestTemplate

RestTemplate restTemplate = new RestTemplate(
                new HttpComponentsClientHttpRequestFactory()); // 使用HttpClient,支持GZIP
        restTemplate.getMessageConverters().set(1,
                new StringHttpMessageConverter(StandardCharsets.UTF_8)); // 支持中文编码

简单使用

@RestController
@RequestMapping("/rest")
public class RestTemplateController {

    @Autowired
    private RestTemplate restTemplate;

    private String urlPrefix = "http://localhost:8080/";

    @GetMapping
    public ResponseEntity<BaseResult> findAll(){
        ResponseEntity<BaseResult> forEntity = restTemplate.getForEntity(urlPrefix + "brand", BaseResult.class);
        return forEntity;
    }    

       @GetMapping("/product")
    public ResponseEntity<BaseResult> findAllProduct(PageRequest pageRequest){
        // 也可以直接将参数拼接在地址栏上 注意传递参数是 参数为null 会被拼接为字符串的问题
        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("pageNum",pageRequest.getPageNum());
        hashMap.put("pageSize",pageRequest.getPageSize());
        ResponseEntity<BaseResult> forEntity = restTemplate.getForEntity(urlPrefix + "product?pageNum={pageNum}&pageSize={pageSize}",BaseResult.class,hashMap);
        return forEntity;
    }

    @PostMapping
    public ResponseEntity<String> add(@RequestBody TbProduct tbProduct){
        ResponseEntity<String> forEntity = restTemplate.postForEntity(urlPrefix + "product",tbProduct, String.class);
        return ResponseEntity.ok(forEntity.getBody());
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<String> deleteById(@PathVariable Integer id){
        restTemplate.delete(urlPrefix + "product/"+id);
        return ResponseEntity.ok("删除成功");
    }

    @PutMapping
    public ResponseEntity<String> edit(@RequestBody TbProduct tbProduct){
        restTemplate.put(urlPrefix + "product",tbProduct);
        return ResponseEntity.ok("修改成功");
    }
}
Copyright © TaoQZ 2019 all right reserved,powered by Gitbook作者联系方式:taoqingzhou@gmail.com 修订时间: 2024-11-19 17:25:43

results matching ""

    No results matching ""

    results matching ""

      No results matching ""