zoukankan      html  css  js  c++  java
  • SpringBoot使用RestTemplate

    设置pom引用

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.itstudy</groupId>
        <artifactId>demo</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    
        <name>demo</name>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.9.RELEASE</version>
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.30</version>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>

    2.增加配置类

    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.web.client.RestTemplate;
    import org.springframework.http.converter.StringHttpMessageConverter;
    import java.nio.charset.Charset;
    
    @Configuration
    public class RestTemplateConfig {
    
        @Bean
        public RestTemplate restTemplate(ClientHttpRequestFactory factory){
            RestTemplate restTemplate= new RestTemplate(factory);
            // 支持中文编码
            restTemplate.getMessageConverters().set(1,
                    new StringHttpMessageConverter(Charset.forName("UTF-8")));
            return restTemplate;
    
        }
    
        @Bean
        public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
            SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
            factory.setReadTimeout(5000);//单位为ms
            factory.setConnectTimeout(5000);//单位为ms
            return factory;
        }
    }

    3.在service中使用

    import com.alibaba.fastjson.JSONObject;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpEntity;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.MediaType;
    import org.springframework.web.client.RestTemplate;
    
    public class RestTestService {
    
        @Autowired
        private RestTemplate restTemplate;
    
        public void test(){
    
            String paras = "data";
            String url="http://127.0.0.1";
    
            HttpHeaders headers = new HttpHeaders();
            MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
            headers.setContentType(type);
            headers.add("Accept", MediaType.APPLICATION_JSON.toString());
            JSONObject jsonObj = JSONObject.parseObject(paras);
            HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers);
            String result = restTemplate.postForObject(url, formEntity, String.class);
        }
    
        public void testExchage(){
            
            String url="";
            
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON_UTF8));
    
            Map<String,String> postData = new HashMap<String,String>();
            postData.put("param1","123");
            postData.put("param2","abc");
    
            //发送json字符串
            String content = JSON.toJSONString(postData);
            
            HttpEntity<String> httpEntity = new HttpEntity<String>(content, httpHeaders);
            
            try {
            
                ResponseEntity<String> responseEntity =
                        restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
                        
                Map<String,String> mapResponse = JSON.parseObject(responseEntity.getBody(),HashMap.class);
    
            }catch (Exception ex){
                //进行错误处理
            }
        }
    
        public void testExchage2(){
            
            String url="";
            
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON_UTF8));
            
            //参数放入一个map中,restTemplate不能用hashMap
            MultiValueMap<String,String> param = new LinkedMultiValueMap<String, String>();
            //将请求参数放入map中
            param.add("param1","abc");
            param.add("param2","123");
            
            //将参数和header组成一个请求
            HttpEntity<MultiValueMap<String,String>> httpEntity = new HttpEntity<MultiValueMap<String,String>>(param,headers);
    
            try {
                ResponseEntity<String> responseEntity =
                        restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);    
            
                //responseEntity.getBody()进行其它处理
    
            }catch (Exception ex){
                //进行错误处理
            }
        }
    }

    4.应用启动

    import org.springframework.boot.Banner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class App {
    
        public static void main(String[] args) {
    
            SpringApplication app = new SpringApplication(App.class);
            //关闭banner
            app.setBannerMode(Banner.Mode.OFF);
            app.run(args);
        }
    
    }

    另外注意RestTemplate默认 如果返回状态不是200则会报错,因此这个要进行捕获

    /判断接口返回是否为200
        public static Boolean ping(){
            String url = domain + "/it/ping";
            try{
                ResponseEntity<String> responseEntity = template.getForEntity(url,String.class);
                HttpStatus status = responseEntity.getStatusCode();//获取返回状态
                return status.is2xxSuccessful();//判断状态码是否为2开头的
            }catch(Exception e){
                return false; //502 ,500是不能正常返回结果的,需要catch住,返回一个false
            }
        }

    或者进行自定义处理

    import java.io.IOException;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.http.client.ClientHttpRequestFactory;
    import org.springframework.http.client.ClientHttpResponse;
    import org.springframework.http.client.SimpleClientHttpRequestFactory;
    import org.springframework.web.client.ResponseErrorHandler;
    import org.springframework.web.client.RestTemplate;
    
    @Configuration
    public class RestTemplateConfig {
        
        @Bean
        public RestTemplate restTemplate(ClientHttpRequestFactory factory) throws Exception {
            RestTemplate restTemplate = new RestTemplate(factory);
            ResponseErrorHandler responseErrorHandler = new ResponseErrorHandler() {
                @Override
                public boolean hasError(ClientHttpResponse clientHttpResponse) throws IOException {
                    return true;
                }
                @Override
                public void handleError(ClientHttpResponse clientHttpResponse) throws IOException {
    
                }
            };
            restTemplate.setErrorHandler(responseErrorHandler);
            return restTemplate;
        }
        
        @Bean
        public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
            SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
            //读取超时5秒
            factory.setReadTimeout(5000);
            //连接超时15秒
            factory.setConnectTimeout(15000);
            return factory;
        }
    }
  • 相关阅读:
    为SharePoint 2010中的FBA创建自定义登录页面
    SharePoint 2010设置问卷调查权限
    无法创建您的个人网站,因为未启用“自助式网站创建”
    等级歧视的死循环[转]
    职业生涯中的10个致命错误
    项目经理须具备所有9 大知识领域
    项目管理工具和技术
    在SharePoint Server 2010中创建“我的网站”
    MATCH_PARENT是什么类型的布局
    Android 在代码中获取手机屏幕的宽高
  • 原文地址:https://www.cnblogs.com/liuxm2017/p/9799122.html
Copyright © 2011-2022 走看看