spring引导无法访问rest控制器

z9smfwbn  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(405)

我有一个简单的问题-springbootapplication看不到我的控制器-更奇怪的是-只有三个控制器中的一个。
我有usercontroller,walletcontroller和dashboardcontroller-这个对我的应用程序不可见。
我已经做的是:
每个带有控制器的包都在主包下,我的springbootapplication.class在主包下,
我试着用@componentscan注解主springbootapplication.class,同时使用basepackages和basepackageclasses,
没有其他bean-应该在@component上加注解,我删除了它们并将方法移到了dashboardservice.class中
这是我的控制器,它不可见: Jmeter 板控制器
这是我的包结构(似乎是对的):包结构
谢谢你的帮助!
编辑:
使用第三方api来获取所需的数据可能很重要
在这种方法中,我使用url:

private String getNbpJson(String url) {
        return new RestTemplate().getForObject(url, String.class);
    }

    private CurrentRateDTO getCurrentExchangeRate(String json) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();

        JsonNode node = mapper.readTree(json);

        String code = node.get("code").toString();
        String date = node.get("rates").get(0).get("effectiveDate").toString();

        double bid = node.get("rates").get(0).get("bid").asDouble();
        double ask = node.get("rates").get(0).get("ask").asDouble();

        return new CurrentRateDTO(code, date, bid, ask);
    }

然后在exchangeservice中,这是我的url

@Service
public class ExchangeRateService implements IExchangeRateService {

    private static final Logger logger = LoggerFactory.getLogger(ExchangeRateService.class);

    private String NBP_CURRENT_RATE_URL = "http://api.nbp.pl/api/exchangerates/rates/c/eur/2020-12-11/?format=json";

另外。。。当我将方法从dashboardcontroller移动到walletcontroller时(这很有效)
我发现的另一件事是,只有使用第三方api的方法不起作用。基本上,我从上面的url检索数据-我得到特定的字段,创建一个填充字段的对象。
可能是从第三方检索数据然后在我的应用程序中实现的问题吗?
我现在没有更多的想法。。。

9nvpjoqh

9nvpjoqh1#

可能您的控制器已注册,但您键入的url略有不同。尝试此属性 logging.level.org.springframework.web.servlet.mvc.method.annotation: TRACE 并在应用程序启动时检查控制器是否在其他url下注册。
尝试将此添加到控制器

@RestController()   
@RequestMapping("exchangerates")
y1aodyip

y1aodyip2#

好吧,我可能发现了问题。。。在我有3个控制器之前:

@RestController("/api")
public class UserController {}

@RestController("/wallets")
public class WalletController {}

@RestController("/exchangerates")
public class DashboardController {}

我把上面的改成

@RestController("/api")
public class UserController {}

@RestController
public class WalletController {}

@RestController
public class DashboardController {}

所以,基本上我去掉了底端?端点?对于每个控制器,现在它工作了。。。三个restcontrollers中的基本端点似乎太多,而第三个端点不可用,但我不知道这是真的(我打赌不是)。
为什么会这样,有人能解释控制器的行为吗?谢谢你的解释。

相关问题