У меня простая проблема - SpringBootApplication не видит мой контроллер - что еще странно - только один из трех.
У меня есть UserController, WalletController и DashboardController — этот не виден для моего приложения.
То, что я уже сделал, это:
Это мой контроллер, который не виден: Панель управления
А это моя структура пакета (вроде правильная): Структура пакета
Спасибо за помощь!
Обновлено:
Может быть важно, чтобы я использовал сторонний 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-адреса — получаю определенные поля, создаю объекты с заполненными полями.
Может ли быть проблема с получением данных от третьих лиц и их последующей реализацией в моем приложении?
Больше идей у меня пока нет...
Пробовали @SpringBootApplication(scanBasePackages = {"pl.agn.exchange"})
?
Да, я уже перепробовал все эти вещи, связанные со сканированием пакетов, поэтому я понятия не имею, что может быть не так и почему это происходит.
Возможно, ваш контроллер зарегистрирован, но вы вводите немного другой URL-адрес. Попробуйте это свойство logging.level.org.springframework.web.servlet.mvc.method.annotation: TRACE
и проверьте при запуске приложения, зарегистрирован ли контроллер под каким-либо другим URL-адресом.
Попробуйте добавить это в свой контроллер
@RestController()
@RequestMapping("exchangerates")
Это интересно... Я оставил аннотацию своего контроллера в виде @RestController("/exchangerates)
, но свойство, которое вы мне показали, отображает это: p.a.e.d.DashboardController: {GET /rate/{currencyCode}}: getCurrentRate(String)
вот что я подумал, когда увидел путь к твоему контроллеру;)
Хорошо, я, наверное, обнаружил проблему ... До того, как у меня будет 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 слишком много, а третий недоступен, но я не знаю, правда ли это (держу пари, что это не так).
Почему тогда это произошло, кто-нибудь может объяснить такое поведение контроллеров? Спасибо за объяснение.
проверьте мой обновленный ответ выше с другой аннотацией.
По умолчанию, если в bean-компоненте есть только один конструктор
public
, он будет автоматически подключен Spring с внедрением конструктора, нет необходимости в явной аннотации@Autowired
.