Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
-8 / 0 / 0
Регистрация: 16.02.2020
Сообщений: 21

Spring Boot не смог найти бин RestTemplate

16.03.2025, 11:20. Показов 1458. Ответов 1
Метки java (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте Spring Boot не может найти бин RestTemplate, все перепроверил ,вроде ошибок нет ,но в консоле java.lang.NullPointerException: Cannot invoke "org.springframework.web.client.RestOper ations.getForObject(String, java.lang.Class, Object[])" because "restTemplate" is null
Вот коды где он используется
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package com.example.demo;
 
import com.example.demo.TemperatureCalculator;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
 
//Этот сервис отвечает за:
// Запросы к 3 API
// Расчёт средней температуры
//Возврат итогового результата
//Внедрение RestTemplate происходит через конструктор. Это корректный способ по правилам Spring Boot.
//Методы getOpenWeatherTemperature(), getWeatherApiTemperature() и getVisualCrossingTemperature() делают HTTP-запросы к соответствующим API и извлекают температуру.
//Метод getAverageTemperature() использует TemperatureCalculator для вычисления средней температуры.
 
@Service
public class WeatherService {
 
    private final RestTemplate restTemplate;
 
    public WeatherService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }
 
 
 
    public String getAverageTemperature(String city) {
        // Получение данных от 3-х API
        double openWeatherTemp = getOpenWeatherTemperature(city);
        double weatherApiTemp = getWeatherApiTemperature(city);
        double visualCrossingTemp = getVisualCrossingTemperature(city);
 
        // Применение алгоритмов расчета
        double averageTemp = TemperatureCalculator.calculateAverage(
                openWeatherTemp, weatherApiTemp, visualCrossingTemp);
 
        return String.format("%.1f °C", averageTemp);
    }
 
    private double getOpenWeatherTemperature(String city) {
        String apiKey = "cafe03dcade606efc746e8f06c7126e4";
        String url = String.format(
                "https://api.openweathermap.org/data/2.5/weather?q=%s&appid=%s&units=metric",
                city, apiKey);
        try {
            WeatherData weatherData = restTemplate.getForObject(url, WeatherData.class);
            return weatherData != null ? weatherData.getTemperature() : 0.0;
        } catch (Exception e) {
            System.err.println("Ошибка получения данных от OpenWeather: " + e.getMessage());
            return 0.0;
        }
    }
 
 
    private double getWeatherApiTemperature(String city) {
        String apiKey = "e3248ebc120e47a5ba271442251103";
        String url = String.format(
                "https://api.weatherapi.com/v1/current.json?key=%s&q=%s",
                apiKey, city);
        return restTemplate.getForObject(url, WeatherData.class).getTemperature();
    }
 
    private double getVisualCrossingTemperature(String city) {
        String apiKey = "J7754ZPMV39VA6KX8RGC27K9F";
        String url = String.format(
                "https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/%s?key=%s&unitGroup=metric",
                city, apiKey);
        return restTemplate.getForObject(url, WeatherData.class).getTemperature();
 
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.example.demo;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
 
@Configuration
public class AppConfig {
 
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.03.2025, 11:20
Ответы с готовыми решениями:

[Spring Boot & Thymeleaf] Сервер не может найти статические ресурсы
Здесь написано Spring Boot will automatically add static web resources located within any of the following directories: ...

Spring MVC forward на внешний URL и пробема с RestTemplate
Здравствуйте Я разрабатываю веб-приложение на Spring 4, которое работает как проски для ресурсов компании. Оно запускается на томкате...

Spring не ищет бин через аннотацию
Есть класс @Service("a") public class CollectionInjection { @Resource(name = "map") private Map<String, Object> map; ...

1
15 / 15 / 1
Регистрация: 26.01.2015
Сообщений: 82
25.04.2025, 00:46
Автор, твой пример не полный. Не указан WeatherData. Может я ошибаюсь, но разве для разных API вызова прогноза погоды:

getOpenWeatherTemperature(city);
getWeatherApiTemperature(city);
getVisualCrossingTemperature(city);

Будет одинаковое DTO для получения результата?

Я сократил несколько твой пример, и добавил Controller, вывод результата получаю в String.class. У меня RestTemplate отработал успешно.


Контроллер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import info.shkryl.service.WeatherService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
@RequestMapping("/weather")
public class WeatherController {
 
    private final WeatherService weatherService;
 
 
    public WeatherController(WeatherService weatherService) {
        this.weatherService = weatherService;
    }
 
    @GetMapping("/get")
    public String getWeather(){
        return weatherService.getAverageTemperature();
    }
}

Сервис:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
 
@Service
public class WeatherService {
 
    private final RestTemplate restTemplate;
 
    public WeatherService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }
 
    public String getAverageTemperature() {
        // Получение данных
        return getOpenWeatherTemperature("Moscow");
    }
 
    private String getOpenWeatherTemperature(String city) {
        String apiKey = "cafe03dcade606efc746e8f06c7126e4";
        String url = String.format(
                "https://api.openweathermap.org/data/2.5/weather?q=%s&appid=%s&units=metric",
                city, apiKey);
        try {
            String weatherData = restTemplate.getForObject(url, String.class);
            return weatherData != null ? weatherData : "0";
        } catch (Exception e) {
            throw new RuntimeException("Ошибка получения данных от OpenWeather: " + e.getMessage());
        }
    }
}

Конфигурация:
Java
1
2
3
4
5
6
7
8
9
10
11
12
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
 
@Configuration
public class AppConfig {
 
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

Результат при вызове endpoint:
http://localhost:8080/weather/get
На дату: 25.04.2025 время 00:45 вот такой:
HTML5
1
{"coord":{"lon":37.6156,"lat":55.7522},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04n"}],"base":"stations","main":{"temp":13.92,"feels_like":12.46,"temp_min":12.24,"temp_max":14.63,"pressure":1010,"humidity":42,"sea_level":1010,"grnd_level":991},"visibility":10000,"wind":{"speed":4.1,"deg":83,"gust":7.37},"clouds":{"all":79},"dt":1745530218,"sys":{"type":2,"id":2094500,"country":"RU","sunrise":1745546408,"sunset":1745600073},"timezone":10800,"id":524901,"name":"Moscow","cod":200}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.04.2025, 00:46
Помогаю со студенческими работами здесь

Project 'org.springframework.boot:spring-boot-starter-parent:2.3.2.RELEASE' not found
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" ...

Spring: Использование @Qualifier чтобы определить какой бин использовать
Всем привет! Начал изучать Spring 5.0. Хочу разобраться, как использовать аннотацию @Qualifier для выбора нужного бина. В ниже...

Spring Boot VS Tomcat+Spring - что выбрать?
Всем доброго дня! Я наверное еще из старой школы - пилю мелкие проект на Spring + Tomcat... Но хотелось бы чего-то нового ))) ...

Spring Boot или Spring MVC?
Добрый день форумчане. Прошу совета у опытных коллег знающих и работающих с фреймворком Spring. Недавно решил сделать проект для...

Что такое Spring, Spring Boot?
Здравствуйте. Никогда не использовал Spring, Spring Boot. Возник такой вопрос можно ли его использовать в IDE для java Se. Или для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru