spring-无法用crud存储库保存实体

o75abkj4  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(284)

我正在制作一个简单的程序,必须从openweathermap api获取一些信息并将其保存在mysql数据库中:

package com.example.restTemplate;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class RestTemplateApplication {
    public static void main(String[] args) {
        SpringApplication.run(RestTemplateApplication.class, args);
    }
    @Bean
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}
package com.example.restTemplate.Model;

import lombok.*;

import javax.persistence.Entity;
import javax.persistence.Id;

@NoArgsConstructor
@AllArgsConstructor
@Entity
@javax.persistence.Table(name="Weather")
@Getter
@Setter
@ToString

public class WeatherScore {

    @Id
    private int id;
    private String city;
    private double temperature;
    private int  pressure;
    private long currentDate;

}
package com.example.restTemplate.Controller;

import com.example.restTemplate.Model.WeatherScore;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface WeatherCRUDRepository
        extends CrudRepository<WeatherScore, Long> {

    WeatherScore save (WeatherScore score);

}
package com.example.restTemplate.Controller;

import com.example.restTemplate.Model.WeatherScore;
import org.springframework.context.ApplicationContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.Arrays;
import java.util.Random;

@RestController
public class ConsumeWebService {
    @Autowired
    RestTemplate restTemplate;
    WeatherCRUDRepository repository;
    ApplicationContext context;

    @RequestMapping(value = "/weather")
    public void printWeather() {
        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        HttpEntity<String> entity = new HttpEntity<String>(headers);
        String text = restTemplate.exchange("http://api.openweathermap.org/data/2.5/weather?q=London,uk&APPID=mykey",
                HttpMethod.GET, entity, String.class).getBody();

        int pressureStartIndex = text.indexOf("pressure")+10;
        int pressureEndIndex = text.indexOf(",", pressureStartIndex);

        int tempStartIndex = text.indexOf("temp")+6;
        int tempEndIndex = text.indexOf(",", tempStartIndex);

        int pressure = Integer.parseInt(text.substring(pressureStartIndex, pressureEndIndex));
        double temperature = Double.parseDouble(text.substring(tempStartIndex, tempEndIndex));

        WeatherScore score = new WeatherScore();
        score.setCity("London");

        score.setPressure(pressure);
        score.setTemperature(temperature);

        Random generator = new Random();
        score.setId(generator.nextInt(1000));

        score.setCurrentDate(System.currentTimeMillis());

        WeatherCRUDRepository repo = context.getBean(WeatherCRUDRepository.class);

        repository.save(score);
    }
}

当我敲打http://localhost:8080/是否出现错误:
无法调用“org.springframework.context.applicationcontext.getbean(java.lang.class)”,因为“this.context”是空的blockquote
我怎么能修好呢?

ycl3bljg

ycl3bljg1#

必须自动关联控制器中的所有bean,如下所示:

@Autowired
RestTemplate restTemplate;

@Autowired
WeatherCRUDRepository repository;

@Autowired
ApplicationContext context;

相关问题