RestTemplate初始化配置和FastJSON替換Jackson配置


package org.rabbit.consumer.config;
 
import java.nio.charset.StandardCharsets;
import java.util.List;
 
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
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.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
 
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4;
 
/**
 * @author <font color="red"><b>Gong.YiYang</b></font>
 * @Date 2018年7月12日
 * @Version 
 * @Description
 */
@Configuration
@ConditionalOnClass(value = {RestTemplate.class, HttpClient.class})
public class RestTemplateConfiguration {
 
      @Value("${remote.maxTotalConnect}")
      private int maxTotalConnect; //連接池的最大連接數默認為0
      @Value("${remote.maxConnectPerRoute}")
      private int maxConnectPerRoute; //單個主機的最大連接數
      @Value("${remote.connectTimeout}")
      private int connectTimeout; //連接超時默認2s
      @Value("${remote.readTimeout}")
      private int readTimeout; //讀取超時默認30s
 
      private ClientHttpRequestFactory createFactory() {
        if (this.maxTotalConnect <= 0) {
          SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
          factory.setConnectTimeout(this.connectTimeout);
          factory.setReadTimeout(this.readTimeout);
          return factory;
        }
        HttpClient httpClient = HttpClientBuilder.create().setMaxConnTotal(this.maxTotalConnect)
            .setMaxConnPerRoute(this.maxConnectPerRoute).build();
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(
            httpClient);
        factory.setConnectTimeout(this.connectTimeout);
        factory.setReadTimeout(this.readTimeout);
        return factory;
      }
 
      @Bean
      @ConditionalOnMissingBean(RestTemplate.class)
      public RestTemplate getRestTemplate() {
        RestTemplate restTemplate = new RestTemplate(this.createFactory());
        List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters();
 
        HttpMessageConverter<?> converterTarget = null;
        for (HttpMessageConverter<?> item : converterList) {
          if (StringHttpMessageConverter.class == item.getClass()) {
            converterTarget = item;
            break;
          }
        }
        if (null != converterTarget) {
          converterList.remove(converterTarget);
        }
        converterList.add(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
 
        converterList.add(new FastJsonHttpMessageConverter4());
        return restTemplate;
      }
}
package org.rabbit.consumer.config;
 
import java.nio.charset.StandardCharsets;
import java.util.List;
 
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
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.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
 
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4;
 
/**
 * @author <font color="red"><b>Gong.YiYang</b></font>
 * @Date 2018年7月12日
 * @Version 
 * @Description
 */
@Configuration
@ConditionalOnClass(value = {RestTemplate.class, HttpClient.class})
public class RestTemplateConfiguration {
 
      @Value("${remote.maxTotalConnect}")
      private int maxTotalConnect; //連接池的最大連接數默認為0
      @Value("${remote.maxConnectPerRoute}")
      private int maxConnectPerRoute; //單個主機的最大連接數
      @Value("${remote.connectTimeout}")
      private int connectTimeout; //連接超時默認2s
      @Value("${remote.readTimeout}")
      private int readTimeout; //讀取超時默認30s
 
      private ClientHttpRequestFactory createFactory() {
        if (this.maxTotalConnect <= 0) {
          SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
          factory.setConnectTimeout(this.connectTimeout);
          factory.setReadTimeout(this.readTimeout);
          return factory;
        }
        HttpClient httpClient = HttpClientBuilder.create().setMaxConnTotal(this.maxTotalConnect)
            .setMaxConnPerRoute(this.maxConnectPerRoute).build();
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(
            httpClient);
        factory.setConnectTimeout(this.connectTimeout);
        factory.setReadTimeout(this.readTimeout);
        return factory;
      }
 
      @Bean
      @ConditionalOnMissingBean(RestTemplate.class)
      public RestTemplate getRestTemplate() {
        RestTemplate restTemplate = new RestTemplate(this.createFactory());
        List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters();
 
        HttpMessageConverter<?> converterTarget = null;
        for (HttpMessageConverter<?> item : converterList) {
          if (StringHttpMessageConverter.class == item.getClass()) {
            converterTarget = item;
            break;
          }
        }
        if (null != converterTarget) {
          converterList.remove(converterTarget);
        }
        converterList.add(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
 
        converterList.add(new FastJsonHttpMessageConverter4());
        return restTemplate;
      }
}
package org.rabbit.consumer.config;
 
import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4;
 
/**
 * @author <font color="red"><b>Gong.YiYang</b></font>
 * @Date 2018年7月12日
 * @Version 
 * @Description 把spring-boot默認的json解析器由jackson換為fastjson
 */
@Configuration
public class FastjsonConfiguration {
 
     @Bean
      public HttpMessageConverters fastjsonConverter() {
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        //自定義格式化輸出
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,
            SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullNumberAsZero);
 
        FastJsonHttpMessageConverter4 fastjson = new FastJsonHttpMessageConverter4();
        fastjson.setFastJsonConfig(fastJsonConfig);
        return new HttpMessageConverters(fastjson);
      }
}

調用接口實例:封裝數據使用JSONObect

JSONObject object = new JSONObject();
            object.put("pic_id","水電費");
            object.put("pic", img);
            List<JSON> mapObject = new ArrayList<>();
            mapObject.add(object);
            JSONObject object1 = new JSONObject();
            object1.put("id","1");
            object1.put("data",mapObject);
            HttpHeaders header = new HttpHeaders();
            header.setContentType(MediaType.APPLICATION_JSON_UTF8);
            HttpEntity<JSONObject> httpEntity = new HttpEntity<>(object1, header);
            //JSONObject postForObject = restTemplate.postForObject(url, object1, JSONObject.class);
            ResponseEntity<String> postForEntity = restTemplate.postForEntity(url, httpEntity,String.class);
            System.out.println(postForEntity.getBody());

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM