RestTemplate各种传参方式

RestTemplate是Spring提供的用于访问Rest服务的客户端,

RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。

调用RestTemplate的默认构造函数,RestTemplate对象在底层通过使用java.net包下的实现创建HTTP 请求,

可以通过使用ClientHttpRequestFactory指定不同的HTTP请求方式。

ClientHttpRequestFactory接口主要提供了两种实现方式

1、一种是SimpleClientHttpRequestFactory,使用J2SE提供的方式(既java.net包提供的方式)创建底层的Http请求连接。

2、一种方式是使用HttpComponentsClientHttpRequestFactory方式,底层使用HttpClient访问远程的Http服务,使用HttpClient可以配置连接池和证书等信息。

引入以下Jar包,即可通过注解的方式直接使用

1、引入jar包

 

compile group: 'org.springframework.boot',name:'spring-boot-starter-web',version:'1.4.2.RELEASE'

2、配置restTemplate 初始化config,可配置相关参数

@Configuration
public class RestTemplateConfig {

    @Bean(name="httpClient")
    public CloseableHttpClient httpClient() {
        return HttpClientBuilder.create().build();
    }
 
    @Bean
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory());
        return restTemplate;
    }
 
    @Bean
    public HttpComponentsClientHttpRequestFactory clientHttpRequestFactory() {
        HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory();
        clientHttpRequestFactory.setHttpClient(httpClient());
        return clientHttpRequestFactory;
    }
 
    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setThreadNamePrefix("poolScheduler");
        scheduler.setPoolSize(50);
        return scheduler;
    }
}

第二种初始化方式,在启动类中直接new,不需要上面的RestTemplateConfig,使用默认参数

@SpringBootApplication

public class MainApplication {

   @Bean

   public RestTemplate restTemplate(){

      return new RestTemplate();

   }

   public static void main(String[] args) {

      SpringApplication.run(MainApplication .class, args);

   }

}

 

3、使用

@Autowired
private RestTemplate httpRestTemplate

 

 

1.1 POST请求方式

1.1.1单个参数post请求

·被调方:

@PostMapping("/modify")
public RespBody modify(@RequestParam("typeId")int typeId,@RequestParam("typeName")String typeName) {
    try {
        service.modify(typeId,typeName);
        return RespBody.success();
    }catch (Exception e) {
        logger.error("出错", e);
        return RespBody.fail(ErrorCode.ERROR);
    }
}

调用方:

public RespBody modify(long typeId,String typeName) {
    try {
        MultiValueMap map = new LinkedMultiValueMap<>();
        map.add("typeId",typeId);
        map.add("typeName",typeName);
        RespBody respBody = httpRestTemplate.postForObject(URL+ "/modify",map,RespBody.class);
        return respBody;
    } catch (Exception e) {
        log.error("出错", e);
    }
}

1.1.2参数为对象post的形式

被调方:

@PostMapping("save")
public RespBody save(@RequestBody(required = true) WeChatConfigArgs weChatConfigArgs){
    try {
        service.save(weChatConfigArgs);
        return RespBody.success();
    } catch (Exception e) {
        e.printStackTrace();
        return RespBody.fail();
    }

}
调用方:
public RespBody save(WeChatConfigArgs weChatConfigArgs) {
    try {
        RespBody respBody = httpRestTemplate.postForObject( URL+ "/save",weChatConfigArgs,RespBody.class);
        return respBody;
    } catch (Exception e) {
        log.error("保存公众微信配置失败", e);
        return RespBody.fail();
    }
}

1.2 GET请求方式

1.2.1 无参GET请求

调用方:

RespBody respBody = httpRestTemplate.getForObject(URL+ "/save",RespBody.class);

参考文章:https://www.cnblogs.com/duanxz/p/3510622.html

你可能感兴趣的:(Java)