RestTemplate发送请求、基本spring自带RestTemplate发送请求、RestTemplate设置请求头

本文介绍了如何在SpringBoot项目中重写RestTemplate,设置ApacheHttpClient的请求头,包括基本认证和处理JSON数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天分享RestTemplate,直接上代码:

因个人需求需要重写RestTemplate,并设置请求头

import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    String username = "admin";
    String password = "admin123";

    @Bean
    public RestTemplate restTemplate() {

        CloseableHttpClient customHttpClient = returnCloseableHttpClient();

        // 使用 HttpComponentsClientHttpRequestFactory 配置 RestTemplate
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(customHttpClient);

        RestTemplate restTemplate = new RestTemplate(factory);

        // 配置 MappingJackson2HttpMessageConverter 以处理 JSON 数据
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

        return restTemplate;
    }


    public  CloseableHttpClient returnCloseableHttpClient(){
        // 创建 HttpClientBuilder
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

        // 设置 BasicAuth
        CredentialsProvider provider = new BasicCredentialsProvider();

        // 创建认证范围
        AuthScope scope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM);

        // 创建凭据对
        UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(username, password);
        provider.setCredentials(scope, credentials);
        httpClientBuilder.setDefaultCredentialsProvider(provider);

        // 创建自定义的 CloseableHttpClient
        return httpClientBuilder.build();
    }
}

----调用前提:

@Service
public class SysEmployeeCardServiceImpl implements SysEmployeeCardService {

    @Value("${access-control-address}")
    private String ipAddress;

    private final RestTemplate restTemplate;

    @Autowired
    public SysEmployeeCardServiceImpl(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @Override
    public CardInfoSearch findEmployeeCard(CardInfoSearchCond cardInfoSearchCond) {
        String url = ipAddress + Constants.CARDINFO_SEARCH ;

        String jsonRequest= JsonUtils.ctreteJsonString("CardInfoSearchCond",cardInfoSearchCond);
        String result = JsonUtils.resultString(jsonRequest,url,restTemplate, HttpMethod.POST);
        System.out.println(result);

        CardInfoSearch cardInfoSearch=parseEmployeeCardFromResult(result);
        return cardInfoSearch;
    }
}

-----调用:

/**
 *
 * @param jsonRequest 请求体
 * @param url  请求url
 * @param restTemplate
 * @param httpMethod 请求方式
 * @return
 */
public static String resultString(String jsonRequest, String url, RestTemplate restTemplate,HttpMethod httpMethod){
    // 创建HTTP请求头,通常需要设置Content-Type为application/json
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);

    HttpEntity<String> requestEntity = new HttpEntity<>(jsonRequest, headers);
    // 发送POST请求,并获取响应
    //String result = restTemplate.postForObject(url, requestEntity, String.class);

    ResponseEntity<String> resultEntity = restTemplate.exchange(url, httpMethod, requestEntity, String.class);
    String result = resultEntity.getBody();
    return result;
}

--------不需要设置请求的话,直接发送

RestTemplate 直接发送get

ResponseEntity<String> response = restTemplate.getForEntity(url, String.class); String responseBody = response.getBody();

RestTemplate 直接发送post

HttpHeaders headers = new HttpHeaders();  
headers.set("Content-Type", "application/json");  
HttpEntity<String> entity = new HttpEntity<>("requestBody", headers);  
ResponseEntity<String> response = restTemplate.postForEntity(url, entity, String.class);  
String responseBody = response.getBody();

RestTemplate 直接发送put

HttpHeaders headers = new HttpHeaders();  
headers.set("Content-Type", "application/json");  
HttpEntity<String> entity = new HttpEntity<>("requestBody", headers);  
ResponseEntity<String> response = restTemplate.put(url, entity, String.class);  
String responseBody = response.getBody();

RestTemplate 直接发送delete

ResponseEntity<String> response = restTemplate.delete(url);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值