HttpClient的替代者 - RestTemplate
Posted 胖头猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpClient的替代者 - RestTemplate相关的知识,希望对你有一定的参考价值。
需要的包 ,除了Spring的基础包外还用到json的包,这里的数据传输使用json格式
客户端和服务端都用到一下的包
<!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework-version}</version> <exclusions> <!-- Exclude Commons Logging in favor of SLF4j --> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework-version}</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.1</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.1</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.8.1</version> </dependency>
一、服务器端代码如下,主要是提供两个接口 @Controller @RequestMapping("/rest") public class RestController { //http://localhost:8080/Springmvc/rest/getPerson @RequestMapping(value="/getPerson",method=RequestMethod.GET) @ResponseBody public Person getPerson(Integer id){ System.out.println("getPerson..."+id); Person p = new Person("tom", 12); return p; } //http://localhost:8080/Springmvc/rest/postPerson @ResponseBody @RequestMapping(value="/postPerson",method=RequestMethod.POST) public Person postPerson(@RequestBody Person p){ //@RequestBody用于接收传来的对象,不加的话会接收不到数据 System.out.println("call postPerson :"+p); return p; } }
二、客户端代码:
1. HttpClient风格的
package com.mvc.rest; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClients; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.mvc.entity.Person; public class MyClient { /** * 需要apache的http包和json包 * */ public static void main(String[] args) throws JsonParseException, JsonMappingException, UnsupportedOperationException, IOException { //HttpClient是Apache的 HttpClient client = HttpClients.createDefault(); HttpGet request = new HttpGet("http://localhost:8080/Springmvc/rest/getPerson?id=1"); request.setHeader("Accept", "application/json"); HttpResponse response = client.execute(request); HttpEntity entity = response.getEntity(); //利用json的ObjectMapper把请求到的数据转化为对象 ObjectMapper mapper = new ObjectMapper(); Person p =mapper.readValue(entity.getContent(), Person.class); System.out.println(p); } }
2.RestTemplate 风格的
import org.springframework.web.client.RestTemplate;
Spring提供的Rest风格的RestTemplate比Apache的HttpClient操作更方便
@Bean(name="restTemplate") public RestTemplate restTemp(){ return new RestTemplate(); }
@Autowired private RestTemplate re; @RequestMapping("/testRestTemplate") public void get(){ //Person p = re.getForObject("http://localhost:8080/Springmvc/rest/getPerson", Person.class); Person p = re.postForObject("http://localhost:8080/Springmvc/rest/postPerson", new Person("hello",34),Person.class); //re.put(url, request, urlVariables); //re.delete(url, urlVariables); System.out.println("call testRestTemplate :"+p); }
以上是关于HttpClient的替代者 - RestTemplate的主要内容,如果未能解决你的问题,请参考以下文章
我需要 Android 中 HttpClient 的替代选项来将数据发送到 PHP,因为它不再受支持
ASP.NET Core中如何针对一个使用HttpClient对象的类编写单元测试
ASP.NET Core中如何针对一个使用HttpClient对象的类编写单元测试
OpenFeign的远程调用使用HttpClient优化性能 及 最佳实践方式