RestTemplate简单使用方法

1.SpringMvc中已经依赖了RestTemplate,可以注入直接使用。RestTemplate的底层可以使用第三方的http客户端工具实现http 的请求,常用的http客户端工具有Apache HttpClient、OkHttpClient等

2.替换http客户端工具为OkHttpClient

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>3.9.1</version>
</dependency>

3.注入RestTemplate

@Bean
public RestTemplate restTemplate(){
	// return new RestTemplate();
	return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
}

4.测试过程中Controller中的方法:

@GetMapping("/user/{id}")
public User queryById(@PathVariable Long id, String name){
	System.out.println(id+"----"+name);
	return userService.queryById(id);
}

@PostMapping("/user/add")
public User add(@RequestBody User user){
	System.out.println(user);
	return user;
}
@PostMapping("/user/add2")
public User add2(User user){
	System.out.println(user);
	return user;
}

5.测试restTemplate的api方法

			//get请求
			@Test
			public void test(){
				String url = "http://localhost/user/1";
				//restTemplate可以对json格式字符串进行反序列化
				User user = restTemplate.getForObject(url, User.class);
				System.out.println("user:"+user);

				ResponseEntity<Map> forEntity = restTemplate.getForEntity(url, Map.class);
				Map map = forEntity.getBody();
				System.out.println("forEntity:"+map);

				ResponseEntity<User> get = restTemplate.exchange(url+"?name=lisi", HttpMethod.GET, null, User.class);
				System.out.println("get exchange:"+ get.getBody());
			}
			
			//提交json数据
			@Test
			public void testPostJsonData(){
				String addUrl = "http://localhost/user/add";
				User user = new User();
				user.setName("王五");
				user.setSex(1);
				user.setUserName("wangwu");
				ResponseEntity<Map> postForEntity = restTemplate.postForEntity(addUrl, user, Map.class);
				Map forEntityBody = postForEntity.getBody();
				System.out.println("postForEntity:"+forEntityBody);

				HttpHeaders headers = new HttpHeaders();
				headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
				Map bodyMap = new HashMap();
				bodyMap.put("userName","zhangsan");
				bodyMap.put("password","123456");
				bodyMap.put("name","张三");
				bodyMap.put("age","15");
				HttpEntity<Map> httpEntity = new HttpEntity<Map>(bodyMap, headers);
				ResponseEntity<User> post = restTemplate.exchange(addUrl, HttpMethod.POST, httpEntity, User.class);
				System.out.println("post exchange:"+ post.getBody());
			}
			
			//提交表单数据
			@Test
			public void testPostFormData(){
				String addUrl = "http://localhost/user/add2";

				HttpHeaders headers = new HttpHeaders();
				headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
				//Map bodyMap = new HashMap();
				//bodyMap.put("userName","zhaoliu");
				//bodyMap.put("password","123456");
				//bodyMap.put("name","赵六");
				//bodyMap.put("age","15");
				//HttpEntity<Map> requestEntity = new HttpEntity<Map>(bodyMap, headers);

				//封装参数,千万不要替换为Map与HashMap,否则参数无法传递
				MultiValueMap<String, String> params= new LinkedMultiValueMap<String, String>();
				params.add("userName", "zhaoliu");
				params.add("password", "123456");
				params.add("name", "赵六");
				params.add("age", "37");
				HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(params, headers);

				ResponseEntity<User> post = restTemplate.exchange(addUrl, HttpMethod.POST, requestEntity, User.class);
				System.out.println("post exchange:"+ post.getBody());
			}

Post请求提交表单数据

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.util.Map;

public class TestRestTemplat{
    public static String Test(RestTemplate restTemplate) {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("header1", "header1");
        httpHeaders.add("header2", "header2");
        httpHeaders.add("header3", "header3");
        httpHeaders.add("header4", "header4");
        httpHeaders.add("Content-Type", "application/x-www-form-urlencoded");
        MultiValueMap<String,String> body = new LinkedMultiValueMap<>();
        body.add("param1", "param1");
        body.add("param2", "param2");
        body.add("param3", "param3");
        HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(body, httpHeaders);
        ResponseEntity<Map> response = restTemplate.postForEntity("url", httpEntity, Map.class);
       	//response.getBody获得响应体的内容.get("filed")可以获取响应体的某个filed对应的值
        return response.getBody().get("filed");
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值