Spring Boot中RestTemplate的使用

使用spring进行REST

1.SpringBoot 使用RestTemplateBuilder配置RestTemplate

//首先,在springboot启动类中,或者配置类中进行配置
@Autowired
RestTemplateBuilder restTemplateBuilider;

@Bean
public RestTemplate restTemplate() {
//使用build()方法进行获取
       return restTemplateBuilder.build();
}

然后,通过请求进行配置


@Autowired
private RestTemplate restTemplate;
//模拟get请求,第一个参数是链接和参数,第二个是期望的返回对象的类 如String.class
restTemplate.getForObject( urlAndArgs , Object.class);
//模拟post请求,第一个参数是url, 第二个参数是 传的参数的实体类,第三个是期望的返回类型。
restTemplate.postForObject(url, entity, Object.class);
//模拟delete请求
restTemplate.exchange(nodeUrl,HttpMethod.DELETE,new HttpEntity<String[]>(ids),String.class);

RestTemplate使用这个方法创建,但是它的范围仅限制于我们创建的类中

2、使用一个RestTemplateCustomizer配置

对于这个途径,我们可以创建一个广泛的应用,附加自定义。

这是一个稍微复杂难懂的途径。对于这个途径我们需要创建一个实现RestTemplateCustomizer的类,并且作为一个bean定义它。

public class CustomRestTemplateCustomizer implements RestTemplateCustomizer {
    @Override
    public void customize(RestTemplate restTemplate) {
        restTemplate.getInterceptors().add(new CustomClientHttpRequestInterceptor());
    }
}

CustomClientHttpRequestInterceptor 拦截器做一些基本的请求日志记录。

public class CustomClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {
    private static Logger LOGGER = LoggerFactory
      .getLogger(CustomClientHttpRequestInterceptor.class);
 
    @Override
    public ClientHttpResponse intercept(
      HttpRequest request, byte[] body, 
      ClientHttpRequestExecution execution) throws IOException {
  
        logRequestDetails(request);
        return execution.execute(request, body);
    }
    private void logRequestDetails(HttpRequest request) {
        LOGGER.info("Headers: {}", request.getHeaders());
        LOGGER.info("Request Method: {}", request.getMethod());
        LOGGER.info("Request URI: {}", request.getURI());
    }
}

现在在配置类中我们定义一个CustomRestTemplateCustomizer bean或者在我们的spring boot application类中。

@Bean
public CustomRestTemplateCustomizer customRestTemplateCustomizer() {
    return new CustomRestTemplateCustomizer();
}

在这个配置中,在我们的应用中我们使用的每一个RestTemplate 都将设置自定义拦截器。

3、配置创建我们自己的RestTemplateBuilder

这是一个创建RestTemplate极致的途径。RestTemplateBuilder自动配置默认是禁用的,因此我们需要手工配置它:

@Bean
@DependsOn(value = {"customRestTemplateCustomizer"})
public RestTemplateBuilder restTemplateBuilder() {
    return new RestTemplateBuilder(customRestTemplateCustomizer());
}

在这之后,我们就像使用默认的RestTemplateBuilder一样注入自定义builder,并且创建一个普通RestTemplate。

private RestTemplate restTemplate;
 
@Autowired
public HelloController(RestTemplateBuilder builder) {
    this.restTemplate = builder.build();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值