使用RestTemplate发送请求

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;
        }

}

 

posted @ 2020-04-08 09:22  伍叶春  阅读(632)  评论(0)    收藏  举报