package com.wuyechun.istart.RestTemplate;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* ClassName:RestTemplate <br/>
* Function: TODO ADD FUNCTION. <br/>
* Reason: TODO ADD REASON. <br/>
* Date: 2020年4月7日 下午4:22:53 <br/>
* @author wuyechun
* @version
* @since JDK 1.8
* @see
*/
public class RestTemplateTest {
//@Autowired
//private RestTemplate restTemplate;
/**
*
* 描述:测试Test请求,直接使用地址携带参数
* date: 2020年4月7日 下午4:51:43
* @author wuyechun2010@163.com
* @throws JsonProcessingException
* @since JDK 1.8
*/
@Test
public void testGet() throws JsonProcessingException {
RestTemplate restTemplate=new RestTemplate();
String url="https://api.binstd.com/shouji/query?appkey=b3455451648a67f4&shouji=18019563065";
Object obj= restTemplate.getForEntity(url, Object.class).getBody();
System.out.println("直接使用Object进行接收:"+obj.toString());
DataInfo dataInfo=restTemplate.getForEntity(url, DataInfo.class).getBody();
ObjectMapper mapper = new ObjectMapper();
System.out.println("使用Jackson解析后的:"+mapper.writeValueAsString(dataInfo));
}
/**
*
* 描述:测试GET请求,采用Map存放参数
* date: 2020年4月8日 上午9:17:52
* @author wuyechun2010@163.com
* @since JDK 1.8
*/
@Test
public void testGet2() {
RestTemplate restTemplate=new RestTemplate();
Map<String,String> map = new HashMap();
map.put("appkey","b3455451648a67f4");
map.put("shouji","18019563065");
//利用map装载参数,不过它默认解析的是PathVariable的url形式
DataInfo dataInfo = restTemplate.getForObject("https://api.binstd.com/shouji/query", DataInfo.class,map);
ObjectMapper mapper = new ObjectMapper();
try {
System.out.println("testGet2使用Jackson解析后的:"+mapper.writeValueAsString(dataInfo));
} catch (JsonProcessingException e) {
System.out.println("报错了!");
e.printStackTrace();
}
}
@Test
public void testPost() {
RestTemplate restTemplate = getThirdRestTemplate();
String url = "https://api.binstd.com/idcard/query";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> map= new LinkedMultiValueMap<>();
map.add("appkey", "b3455451648a67f4");
map.add("idcard", "340223198808230010");
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
String result = restTemplate.postForObject(url,request,String.class);
System.out.println("POST请求:"+result);
}
/**
*
* 描述:处理中文乱码问题
* date: 2020年4月8日 上午9:10:38
* @author wuyechun2010@163.com
* @return
* @since JDK 1.8
*/
public RestTemplate getThirdRestTemplate() {
Charset thirdRequest = Charset.forName("UTF-8");
RestTemplate restTemplate = new RestTemplate();
// 处理请求中文乱码问题
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
for (HttpMessageConverter<?> messageConverter : messageConverters) {
if (messageConverter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter) messageConverter).setDefaultCharset(thirdRequest);
}
if (messageConverter instanceof MappingJackson2HttpMessageConverter) {
((MappingJackson2HttpMessageConverter) messageConverter).setDefaultCharset(thirdRequest);
}
if (messageConverter instanceof AllEncompassingFormHttpMessageConverter) {
((AllEncompassingFormHttpMessageConverter) messageConverter).setCharset(thirdRequest);
}
}
return restTemplate;
}
}