一 代码位置
https://gitee.com/cakin24/code/tree/master/09/RestTemplateDemo
二 测试Get请求
1 测试代码
package com.example.demo.controller;
import com.example.demo.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.*;
@SpringBootTest
@RunWith(SpringRunner.class)
public class GetTest {
@Autowired
RestTemplateBuilder restTemplateBuilder;
//返回String,不带参数
@Test
public void nparameters() {
RestTemplate client= restTemplateBuilder.build();
ResponseEntity<String> responseEntity = client.getForEntity("http://localhost:8080/getuser1", String.class);
System.out.println(responseEntity.getBody());
}
@Test
public void withparameters1() {
RestTemplate client= restTemplateBuilder.build();
ResponseEntity<String> responseEntity = client.getForEntity("http://localhost:8080/getparameter?name={1}&id={2}", String.class, "hua",2);
System.out.println(responseEntity.getBody());
}
//返回String,带参数
@Test
public void withparameters2() {
RestTemplate client= restTemplateBuilder.build();
Map<String, String> map = new HashMap<>();
map.put("name", "zhonghuaLong");
ResponseEntity<String> responseEntity = client.getForEntity("http://localhost:8080/getparameter?name={name}&id=3", String.class, map);
System.out.println(responseEntity.getBody());
}
@Test
public void restUser1() {
RestTemplate client= restTemplateBuilder.build();
ResponseEntity<User> responseEntity = client.getForEntity("http://localhost:8080/getuser1", User.class);
System.out.println(responseEntity.getBody().getId());
System.out.println(responseEntity.getBody().getName());
}
@Test
public void getForObject() {
RestTemplate client= restTemplateBuilder.build();
User user = client.getForObject("http://localhost:8080/getuser1", User.class);
System.out.println(user.getName());
}
}
2 控制台打印
1
zhonghua
{"id":2,"name":"hua"}
{"id":3,"name":"zhonghuaLong"}
{"id":1,"name":"zhonghua"}
zhonghua
三 测试POST,PUT和DELETE
1 测试代码
package com.example.demo.controller;
import com.example.demo.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.client.RestTemplate;
import java.net.URI;
import static org.junit.Assert.*;
@SpringBootTest
@RunWith(SpringRunner.class)
public class PostTest {
@Autowired
RestTemplateBuilder restTemplateBuilder;
RestTemplate restTemplate = new RestTemplate();
@Test
public void postForEntity() {
//RestTemplate client= restTemplateBuilder.build();
// 封装参数,千万不要替换为Map与HashMap,否则参数无法传递
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
paramMap.add("name", "longzhiran");
paramMap.add("id", 4);
/* User user = new User();
user.setName("hongwei");
user.setId(4);*/
//方法的第一参数表示要调用的服务的地址
//方法的第二个参数表示上传的参数
//方法的第三个参数表示返回的消息体的数据类型
ResponseEntity<User> responseEntity = restTemplate.postForEntity("http://localhost:8080/postuser", paramMap, User.class);
System.out.println(responseEntity.getBody().getName());
}
@Test
public void postForObject() {
// 封装参数,千万不要替换为Map与HashMap,否则参数无法传递
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
paramMap.add("name", "longzhonghua");
paramMap.add("id", 4);
RestTemplate client = restTemplateBuilder.build();
String response = client.postForObject("http://localhost:8080/postuser", paramMap, String.class);
System.out.println(response);
}
@Test
public void postForLocation() {
// 封装参数,千万不要替换为Map与HashMap,否则参数无法传递
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
paramMap.add("name", "longzhonghua");
paramMap.add("id", 4);
RestTemplate client = restTemplateBuilder.build();
URI response = client.postForLocation("http://localhost:8080/post", paramMap);
System.out.println(response);
}
@Test
public void postForexchange() {
// 封装参数,千万不要替换为Map与HashMap,否则参数无法传递
MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
paramMap.add("name", "longzhonghua");
paramMap.add("id", 4);
RestTemplate client = restTemplateBuilder.build();
HttpHeaders headers = new HttpHeaders();
//headers.set("id", "long");
HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap, headers);
ResponseEntity<String> response = client.exchange("http://localhost:8080/postuser", HttpMethod.POST, httpEntity, String.class, paramMap);
System.out.println(response.getBody());
}
@Test
public void put() {
RestTemplate client = restTemplateBuilder.build();
User user = new User();
user.setName("longzhiran");
client.put("http://localhost:8080/{1}", user, 4);
}
@Test
public void delete() {
RestTemplate client = restTemplateBuilder.build();
client.delete("http://localhost:8080/{1}", 4);
}
}
2 测试结果
longzhiran
{"id":4,"name":"longzhonghua"}
null
{"id":4,"name":"longzhonghua"}
最后两个用例因为没有变形相应的控制器,会测试失败