当前位置: 代码迷 >> 综合 >> 通过 RestTemplate 访问 Web 资源
  详细解决方案

通过 RestTemplate 访问 Web 资源

热度:26   发布时间:2024-01-26 15:08:17.0

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 {@Autowiredprivate RestTemplate restTemplate;public static void main(String[] args) {new SpringApplicationBuilder().sources(coffeetest.class) //将这个类作为配置.bannerMode(Banner.Mode.OFF) //关闭启动图案.web(WebApplicationType.NONE)  //关闭tomcat.run(args);// 将命令行参数输入并启动}@Beanpublic RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder){//return new RestTemplate();return restTemplateBuilder.build();}@Overridepublic void run(ApplicationArguments args) throws Exception {URI build = UriComponentsBuilder.fromUriString("http://localhost:8080/coffee/{id}").build(1);// 构建一个uriResponseEntity<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接收请求操作。

  相关解决方案