zoukankan      html  css  js  c++  java
  • springboot-24-restTemplate的使用

    项目中使用的是HttpClient, 后来改成springboot, 偶然间发现restTemplate

    原博客: http://blog.csdn.net/u013895412/article/details/53096855

    {  
      "Author": "tomcat and jerry",  
      "url":"http://www.cnblogs.com/tomcatandjerry/p/5899722.html"      
    } 

    核心代码: 

    String url = "http://localhost:8080/json";  
    JSONObject json = restTemplate.getForEntity(url, JSONObject.class).getBody();  

    实用: 

    restConfig.java

    package com.iwhere.scrapy.rest;
    
    import java.nio.charset.Charset;
    import java.util.Iterator;
    import java.util.List;
    
    import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.http.client.ClientHttpRequestFactory;
    import org.springframework.http.client.SimpleClientHttpRequestFactory;
    import org.springframework.http.converter.HttpMessageConverter;
    import org.springframework.http.converter.StringHttpMessageConverter;
    import org.springframework.web.client.RestOperations;
    import org.springframework.web.client.RestTemplate;
    
    /**
     * 定义restTemplate的配置
     * 
     * @author wenbronk
     * @Date 下午4:33:35
     */
    @Configuration
    public class RestTemplateConfig {
    
        @Bean
        @ConditionalOnMissingBean({ RestOperations.class, RestTemplate.class })
        public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
            // return new RestTemplate(factory);
    
            RestTemplate restTemplate = new RestTemplate(factory);
    
            // 使用 utf-8 编码集的 conver 替换默认的 conver(默认的 string conver 的编码集为"ISO-8859-1")
            List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
            Iterator<HttpMessageConverter<?>> iterator = messageConverters.iterator();
            while (iterator.hasNext()) {
                HttpMessageConverter<?> converter = iterator.next();
                if (converter instanceof StringHttpMessageConverter) {
                    iterator.remove();
                }
            }
            messageConverters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));
    
            return restTemplate;
        }
    
        @Bean
        @ConditionalOnMissingBean({ClientHttpRequestFactory.class})
        public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
            SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
            factory.setReadTimeout(15000);// ms
            factory.setConnectTimeout(15000);// ms
            return factory;
        }
    }

    请求测试: 

    SpringRestTemplateApp.java  
    @RestController  
    @EnableAutoConfiguration  
    @Import(value = {Conf.class})  
    public class SpringRestTemplateApp {  
          
        @Autowired  
        RestTemplate restTemplate;  
          
        /***********HTTP GET method*************/  
        @RequestMapping("")  
        public String hello(){  
            String url = "http://localhost:8080/json";  
            JSONObject json = restTemplate.getForEntity(url, JSONObject.class).getBody();  
            return json.toJSONString();  
        }  
          
        @RequestMapping("/json")  
        public Object genJson(){  
            JSONObject json = new JSONObject();  
            json.put("descp", "this is spring rest template sample");  
            return json;  
        }  
          
        /**********HTTP POST method**************/  
        @RequestMapping("/postApi")  
        public Object iAmPostApi(@RequestBody JSONObject parm){  
            System.out.println(parm.toJSONString());  
            parm.put("result", "hello post");  
            return parm;  
        }  
          
        @RequestMapping("/post")  
        public Object testPost(){  
            String url = "http://localhost:8080/postApi";  
            JSONObject postData = new JSONObject();  
            postData.put("descp", "request for post");  
            JSONObject json = restTemplate.postForEntity(url, postData, JSONObject.class).getBody();  
            return json.toJSONString();  
        }  
          
        public static void main(String[] args) throws Exception {  
            SpringApplication.run(SpringRestTemplateApp.class, args);  
        }  
          
    }  

    也可以异步调用

    @RequestMapping("/async")  
        public String asyncReq(){  
            String url = "http://localhost:8080/jsonAsync";  
            ListenableFuture<ResponseEntity<JSONObject>> future = asyncRestTemplate.getForEntity(url, JSONObject.class);  
            future.addCallback(new SuccessCallback<ResponseEntity<JSONObject>>() {  
                public void onSuccess(ResponseEntity<JSONObject> result) {  
                    System.out.println(result.getBody().toJSONString());  
                }  
            }, new FailureCallback() {  
                public void onFailure(Throwable ex) {  
                    System.out.println("onFailure:"+ex);  
                }  
            });  
            return "this is async sample";  

    自定义header

    @RequestMapping("/headerApi")//模拟远程的restful API  
        public JSONObject withHeader(@RequestBody JSONObject parm, HttpServletRequest req){  
            System.out.println("headerApi====="+parm.toJSONString());  
            Enumeration<String> headers = req.getHeaderNames();  
            JSONObject result = new JSONObject();  
            while(headers.hasMoreElements()){  
                String name = headers.nextElement();  
                System.out.println("["+name+"]="+req.getHeader(name));  
                result.put(name, req.getHeader(name));  
            }  
            result.put("descp", "this is from header");  
            return result;  
        }  
      
        @RequestMapping("/header")  
        public Object postWithHeader(){  
        //该方法通过restTemplate请求远程restfulAPI  
            HttpHeaders headers = new HttpHeaders();  
            headers.set("auth_token", "asdfgh");  
            headers.set("Other-Header", "othervalue");  
            headers.setContentType(MediaType.APPLICATION_JSON);  
              
            JSONObject parm = new JSONObject();  
            parm.put("parm", "1234");  
            HttpEntity<JSONObject> entity = new HttpEntity<JSONObject>(parm, headers);  
            HttpEntity<String> response = restTemplate.exchange(  
                    "http://localhost:8080/headerApi", HttpMethod.POST, entity, String.class);//这里放JSONObject, String 都可以。因为JSONObject返回的时候其实也就是string  
            return response.getBody();  
        }  
  • 相关阅读:
    【leetcode】Search a 2D Matrix
    【leetcode】Minimum Path Sum
    LCD1602和LCD12864
    Keil建立第一个ARM工程的步骤
    Keil建立第一个C51工程的步骤
    STM32 GPIO寄存器 IDR ODR BSRR BRR
    STM32F10x_StdPeriph_Driver_3.5.0(中文版).chm的使用
    如何查看stm32固件库版本及MDK和keil uvision的关系
    stm32时钟系统
    stm32f103和s3c2440配置
  • 原文地址:https://www.cnblogs.com/wenbronk/p/6900002.html
Copyright © 2011-2022 走看看