想要使用 post 方法的剩余模板来使用服务

want to consume service using rest template for post method

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();
}

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

像这样添加一个 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 而不是使用 new..

创建

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

@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;
    }
}
@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;

    }