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

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

16.03.2025, 11:20. Показов 1429. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru