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优化性能 及 最佳实践方式

HttpClient->GetStringAsync() 为 https Uris 抛出 0x000006F4

#私藏项目实操分享#Java多线程下载器基础代码