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

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

    {  
      "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();  
        }
  • 相关阅读:
    Convert Date between LocalDateTime
    Java 8 Date Time API Example Tutorial – LocalDate, Instant, LocalDateTime, Parse and Format
    Enable HTTPS in Spring Boot
    设定范围和步长的递增数验证器Validator
    Codeforces Round #392(div 2) 758D (贪心)
    机器学习:决策树算法(简单尝试)
    Codeforces Round #388 (Div. 2) 749E(巧妙的概率dp思想)
    Codeforces Round #364 (Div. 1) 700B(树)
    Codeforces Round #389 (Div. 2) 752F(树的权值重心)
    Codeforces Round #389 (Div. 2) 752E(二分答案)
  • 原文地址:https://www.cnblogs.com/zhaoyan001/p/7380851.html
Copyright © 2011-2022 走看看