通过 RestTemplate 访问 Web 资源

感情迁移 提交于 2020-01-21 02:05:46

Spring Boot 中的 RestTemplate

在springboot中,有两种方式去配置:

  • 自己new 新建一个RestTemplate实例作为bean 放到容器当中
  • springboot 给我们提供了一个RestTemplateBuilder,通过RestTemplateBuilder.build()去获得一个RestTemplate

RestTemplate中的常用方法:
GET请求:

  • getForObject() / getForEntity()

POST请求:

  • postForObject() /postForEntity()

PUT请求:

  • put()

DELETE请求:

  • delete()

构造 URI

  • UriComponentsBuilder
    构造 URI

  • ServletUriComponentsBuilder
    构造相对于当前请求的 URI

  • MvcUriComponentsBuilder
    构造指向 Controller 的 URI

常用构造方式:

  URI uri = UriComponentsBuilder
                .fromUriString("http://localhost:8080/hotels/{hotel}?q={q}")
                .build("west", "123");
 URI uri = UriComponentsBuilder
                .fromUriString("http://localhost:8080/hotels/{hotel}") //基本的http头
                .queryParam("q", "{q}") //增加一个传入变量
                .encode()     //默认编码
                .buildAndExpand("west", "123") //传入一个数据
                .toUri();   //构建url
  UriComponents uriComponents = MvcUriComponentsBuilder
                .fromMethodCall(on(BookingController.class).getBooking(21)).buildAndExpand(42);
        URI uri = uriComponents.encode().toUri();

实例

@SpringBootApplication
@Slf4j
public class coffeetest implements ApplicationRunner {
    @Autowired
    private RestTemplate restTemplate;
    public static void main(String[] args) {
        new SpringApplicationBuilder()
                .sources(coffeetest.class) //将这个类作为配置
                .bannerMode(Banner.Mode.OFF) //关闭启动图案
                .web(WebApplicationType.NONE)  //关闭tomcat
                .run(args);// 将命令行参数输入并启动
    }


    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder){
        //return new RestTemplate();
        return restTemplateBuilder.build();
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        URI build = UriComponentsBuilder
                .fromUriString("http://localhost:8080/coffee/{id}")
                .build(1);// 构建一个uri
        ResponseEntity<Coffee> c = restTemplate.getForEntity(build, Coffee.class);// get请求操作
        log.info("Response Status: {}, Response Headers: {}", c.getStatusCode(), c.getHeaders().toString());//获取状态响应码 获取
        log.info("Coffee: {}", c.getBody());

        String coffeeUri = "http://localhost:8080/coffee/";
        Coffee request = Coffee.builder()
                .name("Americano")
                .price(BigDecimal.valueOf(25.00))
                .build();
        Coffee response = restTemplate.postForObject(coffeeUri, request, Coffee.class);//get请求
        log.info("New Coffee: {}", response);

        String s = restTemplate.getForObject(coffeeUri, String.class); //get请求操作
        log.info("String: {}", s);
    }
}

结果

在这里插入图片描述

分析

执行该程序之前,先启动https://editor.csdn.net/md/?articleId=103654374(了解 Spring MVC 的切入点)的代码。否则,报错。
我们可以看出通过getStatusCode()方法,取出了该条uri执行后的状态返回码,通过getHeaders()方法,返回了返回信息的格式(编码、时间等等),使用postForObject,进行post发送请求操作,使用getForObject进行get接收请求操作。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!