使用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();
}