如何在Spring REST服务中发出POST请求[重复]

问题描述 投票:0回答:2

此问题已经在这里有了答案:

我有一个服务中心,我想对URL进行POST。当我检查POSTMAN时,此网址有效。

使用POSTMAN,请求为

{

"username": "RenfeInbound",

"password": "renfeinbound"

}

这是我的春季服务休息

@Override
    public RespuestaTransfesaBean peticionLogin(PeticionLoginTransfesa datosLogin) {

        RespuestaTransfesaBean res = null;
        try {

            RestTemplate restTemplate = new RestTemplate();

            HttpEntity<PeticionLoginTransfesa> request = new HttpEntity<>(datosLogin, getHttpHeaders());
            res = restTemplate.postForObject(TRANSFESA_URL, request, RespuestaTransfesaBean.class);

TRANSFESA_URL是我要在其中进行请求的URL。

datosLogin是请求值

方法getHttpHeaders()是

 private HttpHeaders getHttpHeaders() {
            if (headers == null) {
                headers = new HttpHeaders();
               // headers.add("username", TRANSFESA_USER);
               // headers.add("password", TRANSFESA_PASS);
                headers.add("Content-Type", "application/json");
            }

            return headers;
        }

执行请求时,在控制台上出现以下错误

org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://cloud-uat.transfesa.com/renfe-int-api/login": Connection timed out: connect; nested exception is java.net.ConnectException: Connection timed out: connect
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:743)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:669)
    at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:413)
    at com.renfe.bcm.externas.transfesa.service.TransfesaServiceImpl.peticionLogin(TransfesaServiceImpl.java:35)
    at com.renfe.bcm.externas.transfesa.restcontroller.TransfesaRestController.loginTransfesa(TransfesaRestController.java:23)
    at com.renfe.bcm.externas.transfesa.restcontroller.TransfesaRestController$$FastClassBySpringCGLIB$$9aa75999.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
java spring rest
2个回答
0
投票

“连接超时:”表示您的本地服务器无法连接到https://cloud-uat.transfesa.com/renfe-int-api/login

如果您在邮递员中使用任何代理,请在本地服务器中使用相同的代理。或者相反,如果邮递员未使用任何代理,请从本地服务器中删除该代理。


0
投票

Connection timed out有2种可能性

1-可能是您看不到您的URL

因此首先尝试运行以下命令来检查与URL的连接性

curl --header "Content-Type: application/json" \
  --request POST \
  --data '{"username":"xyz","password":"xyz"}' \
  https://cloud-uat.transfesa.com/renfe-int-api/login

如果您遇到相同的例外,则必须检查邮递员上是否有代理

2-您的远程服务器有问题,因为您必须增加resttemplate超时参数,因此对您请求的数据的响应速度很慢,如下所示

//Create resttemplate
RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());

//Override timeouts in request factory
private SimpleClientHttpRequestFactory getClientHttpRequestFactory()
{
    SimpleClientHttpRequestFactory clientHttpRequestFactory
                      = new SimpleClientHttpRequestFactory();
    //Connect timeout
    clientHttpRequestFactory.setConnectTimeout(10_000);

    //Read timeout
    clientHttpRequestFactory.setReadTimeout(10_000);
    return clientHttpRequestFactory;
}

您可以找到示例here

© www.soinside.com 2019 - 2024. All rights reserved.