<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    RestTemplate處理請(qǐng)求狀態(tài)碼為非200的返回?cái)?shù)據(jù)

    RestTemplate是Spring提供的用于訪問(wèn)Rest服務(wù)的客戶端,

    RestTemplate提供了多種便捷訪問(wèn)遠(yuǎn)程Http服務(wù)的方法,能夠大大提高客戶端的編寫效率。

    調(diào)用RestTemplate的默認(rèn)構(gòu)造函數(shù),RestTemplate對(duì)象在底層通過(guò)使用java.net包下的實(shí)現(xiàn)創(chuàng)建HTTP 請(qǐng)求,

    可以通過(guò)使用ClientHttpRequestFactory指定不同的HTTP請(qǐng)求方式。

    ClientHttpRequestFactory接口主要提供了兩種實(shí)現(xiàn)方式

    1、一種是SimpleClientHttpRequestFactory,使用J2SE提供的方式(既java.net包提供的方式)創(chuàng)建底層的Http請(qǐng)求連接。

    2、一種方式是使用HttpComponentsClientHttpRequestFactory方式,底層使用HttpClient訪問(wèn)遠(yuǎn)程的Http服務(wù),使用HttpClient可以配置連接池和證書等信息。

    默認(rèn)的 RestTemplate 有個(gè)機(jī)制是請(qǐng)求狀態(tài)碼非200 就拋出異常,會(huì)中斷接下來(lái)的操作。如果不想中斷對(duì)結(jié)果數(shù)據(jù)得解析,可以通過(guò)覆蓋默認(rèn)的 ResponseErrorHandler ,見(jiàn)下面的示例,示例中的方法中基本都是空方法,只要對(duì)hasError修改下,讓他一直返回true,即是不檢查狀態(tài)碼及拋異常了。

    package com.example.demo.web.config;

    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();
            //讀取超時(shí)5秒
            factory.setReadTimeout(5000);
            //連接超時(shí)15秒
            factory.setConnectTimeout(15000);
            return factory;
        }
    }

    RestTemppate運(yùn)用實(shí)例

    package com.example.demo.web.controller;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;

    import com.example.demo.domain.Book;

    @RestController
    public class TestBookController {
        private Logger logger = LoggerFactory.getLogger(getClass());
        
          @Autowired
          private RestTemplate restTemplate;
          
          @GetMapping("/testaddbook")
          public Book testAddBook() {
                  Book book = new Book();
                  ResponseEntity<Book> responseEntity = restTemplate.postForEntity( "http://localhost:8061/book", book , Book.class);
                  return responseEntity.getBody();
          }

    }

    其他方法,catch HttpStatusCodeException e.getResponseBodyAsString()
    try {
        ResponseEntity<Component> response = restTemplate.exchange(webSvcURL,
            HttpMethod.POST, 
            requestEntity,
            Component.class);
    catch (HttpStatusCodeException e) {
        List<String> customHeader = e.getResponseHeaders().get("x-app-err-id");
        String svcErrorMessageID = "";
        if (customHeader != null) {
            svcErrorMessageID = customHeader.get(0);                
        }
        throw new CustomException(e.getMessage(), e, svcErrorMessageID);
        // You can get the body too but you will have to deserialize it yourself
        
    // e.getResponseBodyAsByteArray()
        
    // e.getResponseBodyAsString()
    }

    https://stackoverflow.com/questions/7878002/resttemplate-handling-response-headers-body-in-exceptions-restclientexception

    https://stackoverflow.com/questions/38093388/spring-resttemplate-exception-handling/51805956#51805956

    posted on 2020-10-16 16:54 paulwong 閱讀(1230) 評(píng)論(0)  編輯  收藏 所屬分類: SPRING

    主站蜘蛛池模板: 亚洲第一永久在线观看| 一级毛片成人免费看a| 国产精品免费无遮挡无码永久视频 | 国产亚洲精品资在线| 亚洲熟妇av午夜无码不卡 | 久久久久成人精品免费播放动漫| 成人伊人亚洲人综合网站222| 美女露100%胸无遮挡免费观看| 毛片a级毛片免费播放100| 亚洲13又紧又嫩又水多| 97人伦色伦成人免费视频| 亚洲精品第五页中文字幕| 一级成人a毛片免费播放| 亚洲毛片一级带毛片基地| 免费在线观看h片| 7777久久亚洲中文字幕| 日韩在线视频免费看| 国产午夜亚洲精品| 免费萌白酱国产一区二区| 国产午夜亚洲精品不卡| 亚洲热线99精品视频| 日韩在线不卡免费视频一区| 精品亚洲AV无码一区二区三区 | 久久亚洲AV成人无码软件| 无码专区永久免费AV网站| 国产亚洲蜜芽精品久久| 亚洲乱码日产一区三区| 久久午夜夜伦鲁鲁片免费无码影视| 亚洲人成在久久综合网站| 国产一级淫片免费播放电影| 在线观看免费黄网站| 亚洲国产精品日韩在线观看| 国产青草视频在线观看免费影院| 一级一级毛片免费播放| 亚洲自偷精品视频自拍| 免费国产成人午夜电影| a在线免费观看视频| 国产成人综合亚洲亚洲国产第一页| 日本免费A级毛一片| 亚洲色大成网站www尤物| a级亚洲片精品久久久久久久|