Spring 启动无法访问 REST 控制器

Spring Boot can't access REST Controller

我有一个简单的问题 - SpringBootApplication 没有看到我的控制器 - 更奇怪的是 - 只有三个中的一个。

我有 UserController、WalletController 和 DashboardController - 这一个对我的应用程序不可见。

我已经做的是:

  1. 每个带控制器的包都在主包下,我的SpringBootApplication.class是,
  2. 我尝试使用 basePackages 和 basePackageClasses @ComponentScan 注释 main SpringBootApplication.class
  3. 没有其他 bean - 应该注释 @Component,我删除了它们并将方法移到了我的 DashboardService.class

这是我的控制器,不可见: DashboardController

这是我的包结构(似乎是正确的):Package Structure

感谢您的帮助!

编辑:

我使用第三方 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 中检索数据 - 我得到特定的字段,创建一个填充字段的对象。

从第三方获取数据然后在我的应用程序中实现它会不会有问题?

我现在没有更多的想法...

可能您的控制器已注册,但您键入的内容略有不同 url。试试这个 属性 logging.level.org.springframework.web.servlet.mvc.method.annotation: TRACE

并检查应用程序启动是否在其他url下注册了控制器。

尝试将此添加到您的控制器

@RestController()   
@RequestMapping("exchangerates")

好吧,我大概发现问题了……在我有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 {}

所以,基本上我删除了 base ?endpoint?对于每个控制器,现在它可以工作了......似乎三个 RestControllers 中的基本端点太多了,第三个不可用,但我不知道这是真的(我我敢打赌它不是)。

为什么会这样,谁能解释一下控制器的这种行为? 谢谢你的解释。