java - 无法使用resttemplate使用rest api

标签 java spring resttemplate

我有这个API,我正在尝试使用,这是链接https://www.live-rates.com/api/price?key=123456&rate=EUR_USD

我已经在我的 Controller 中尝试过这个

@ResponseBody
    @RequestMapping(value = { "/start" }, method = RequestMethod.GET)
    public String start() { 
RestTemplate restTemplate = new RestTemplate();

        String quote = restTemplate.getForObject("https://www.live-rates.com/api/price?key=123456&rate=EUR_USD", String.class);
        return quote.toString();
    }

这在我的日程安排程序中

package com.boilerplate.components;


import java.util.Date;
import org.slf4j.Logger;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Async;

import com.boilerplate.services.MessageListenerService;
import java.util.Random;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;

@Repository
@Transactional
@Configuration
@EnableAsync
@EnableScheduling
public class Scheduler {
//Database read and update and delete
    @Autowired
    private RabbitTemplate rabbitTemplate;

    private static final Logger LOGGER = org.slf4j.LoggerFactory.getLogger(MessageListenerService.class);

    @Autowired 
    private SessionFactory sessionFactory;

    @Async
    @Scheduled(cron="*/60 * * * * *")
    public void doSomething(){

        RestTemplate restTemplate = new RestTemplate();

        String quote = restTemplate.getForObject("https://www.live-rates.com/api/price?key=123456&rate=EUR_USD", String.class);
        LOGGER.info(quote.toString());

  }


    }

他们都无法获取汇率。

使用调度程序时出现此错误

SEVERE: Unexpected error occurred invoking async method 'public void com.boilerplate.components.Scheduler.doSomething()'. org.springframework.web.client.HttpClientErrorException: 403 Forbidden at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91) at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:641) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:597) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:557) at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:264) at com.boilerplate.components.Scheduler.doSomething(Scheduler.java:53) at com.boilerplate.components.Scheduler$$FastClassBySpringCGLIB$$17802b05.invoke() at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.interceptor.AsyncExecutionInterceptor$1.call(AsyncExecutionInterceptor.java:115) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.lang.Thread.run(Thread.java:748)

使用 Controller 时的情况

HTTP ERROR 500

Problem accessing /boilerplate/start. Reason:

Server Error

Caused by:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.client.HttpClientErrorException: 403 Forbidden at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:979) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858) at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:800) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)

我尝试使用其他 json api,例如 https://jsonplaceholder.typicode.com/posts/1,我可以毫无问题地获取 json。

为什么我无法使用其余模板获取汇率。

最佳答案

您是否尝试添加以下代码。您正在尝试使用 HTTPS 进行调用。

CloseableHttpClient httpClient = HttpClients.custom().setSSLHostnameVerifier(new NoopH​​ostnameVerifier()) 。 build (); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(httpClient); RestTemplaterestTemplate = new RestTemplate(requestFactory); 字符串报价 =restTemplate.getForObject("https://www.live-rates.com/api/price?key=123456&rate=EUR_USD", String.class);

关于java - 无法使用resttemplate使用rest api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53155679/

相关文章:

java - 收听 jms 主题时删除消息

java - spring data JPA CriteriaBuilder.isNull 返回语法错误

java - 仅当通过 JAX-RS 调用时才出现 Hibernate 错误

spring - RestTemplate getForObject 到 POJO

java - 如何在 jasper 报告中编写 boolean 表达式?

java - 关于 Java 中 Web 应用程序的 "org.eclipse.wst.server.core"文件夹的几个一般问题

java - 尝试使用 RestTemplate 检索数据时出现空指针异常

java - SpringBoot 将 RestTemplateBuilder 从 1.5.14 升级到 2.1.5

java - Oracle 接手后,sun SCJP/SCJA/SCEA tracks 有哪些变化?

java - Spring Boot中Spring Security的XML配置