【问题标题】:want to consume service using rest template for post method想要使用 post 方法的 rest 模板来使用服务
【发布时间】:2017-09-23 12:58:17
【问题描述】:
public class CommonMethods {
    final Logger logger = (Logger) LoggerFactory.getLogger(CommonMethods.class);

    @Autowired
    HttpClientFactory httpClientFactory;
    enter code here
    @Autowired
    JSONCreation jsonCreation;

    String responseAsStringEmployment;

    public String getEmploymentDetails(EmpProfile empProfile) throws IOException, JSONException {

        HttpClient clientEmployment = httpClientFactory.getHttpClient();

        String urlEmployment = Config.getDefaultCommonServiceURL();
        HttpPost requestEmployment = new HttpPost(urlEmployment + "getEmploymentDetails");
        requestEmployment.addHeader("content-type", "application/json");

        StringEntity params;
        String a = jsonCreation.createJsonforNode(empProfile);
        params = new StringEntity(a);

        requestEmployment.setEntity(params);

        logger.info("Request Employment :" + requestEmployment);
        logger.info("clientEmployment :" + clientEmployment);
        HttpResponse responseEmployment = clientEmployment.execute(requestEmployment);
        logger.info("responseEmployment :" + responseEmployment);
        responseAsStringEmployment = EntityUtils.toString(responseEmployment.getEntity());
        logger.info("Response Employment : " + responseAsStringEmployment);

        logger.info("responseAsStringEmployment  " + responseAsStringEmployment);

        return responseAsStringEmployment;
    }

我必须使用 rest 模板而不是 httpclient。 http客户端运行正常。

我尝试过的rest模板方法如下:

public String getEmployment() {

        String url = "https://empprofile-blue.bdt.com/getEmploymentDetails";
        EmpProfile empProfile = new EmpProfile();
        RestTemplate restTemplate = new RestTemplate();
        EmpProfile result = restTemplate.postForObject(url, empProfile, EmpProfile.class);

        System.out.println(result);

        logger.info(empProfile.toString());

        return result.toString();
}

想在休息模板中配置超时如何实现。

【问题讨论】:

  • 正确格式化您的代码

标签: java rest spring-boot resttemplate


【解决方案1】:
@Autowired
    RestTemplate restTemplate;
    @Autowired
    HttpClientFactory httpClientFactory;


public String getPassportDetails(EmpProfile empProfile) throws JSONException {

        String url = Config.getDefaultCommonServiceURL();

        String a = jsonCreation.createJsonforNode(empProfile);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity<String> entity = new HttpEntity<>(a, headers);
    ((HttpComponentsClientHttpRequestFactory)this.restTemplate.getRequestFactory()).setReadTimeout(1 * 5000);//timeout

        String result = restTemplate.postForObject(url, entity, String.class);
        logger.info(result);

        logger.info(empProfile.toString());

        return result;

    }

【讨论】:

    【解决方案2】:

    像这样添加一个bean

    @Bean
        public RestTemplate restTemplateForEmployment(){
            HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
            CloseableHttpClient httpClient = httpClientBuilder.build();
    
            HttpComponentsClientHttpRequestFactory rf = new HttpComponentsClientHttpRequestFactory(httpClient);
            rf.setConnectTimeout(1000);
            rf.setConnectionRequestTimeout(1000);
            rf.setReadTimeout(10000);
    
            return new RestTemplate(rf);
        }
    

    和 Autowire RestTemplate 而不是使用新创建..

    以上所有超时都以毫秒为单位。

    【讨论】:

      【解决方案3】:
      @Configuration
      public class MyAppConfig {
      
          @Bean
          public RestTemplate restTemplate() {
              return new RestTemplate(clientHttpRequestFactory());
          }
      
          private ClientHttpRequestFactory clientHttpRequestFactory() {
              HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
              factory.setReadTimeout(2000);
              factory.setConnectTimeout(2000);
              return factory;
          }
      }
      

      【讨论】:

      • 基于 XML 的配置是这样的:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多