Переменная Spring autowired недоступна для использования - PullRequest
0 голосов
/ 23 сентября 2018

Я новичок в весенних и весенних сапогах.Я на самом деле пытался отдохнуть в Springboot.Когда я пишу клиент и получаю ответ, я хотел прочитать тело ответа, которое является String, и хотел преобразовать его в JSON для моего использования.Итак, я написал класс RestClient, и из этого я автоматически связал класс JsonUtil, который делает String для JSON.Но мой autowired jsonutil недоступен для использования в клиентском классе Rest.Я не знаю, что мне нужно делать здесь.Ниже мой код.

Мой RestClient

@Component
public class RestClient {

    @Autowired
    JsonUtil jsonUtil;

    private static final String URL ="https://test.com?q=";

    private static String getURL(String value){
        if(!StringUtils.isBlank(value))
            return URL+value;

        return null;
    }

    private static void get(String val){
    RestTemplate restTemplate = new RestTemplate();
        String resourceUrl=getURL(val);
        ResponseEntity<String> response = null;
        if(!StringUtils.isBlank(resourceUrl)){
            response  = restTemplate.getForEntity(resourceUrl , String.class);
        }
    //Though i have autowired JsonUtil, i dont have that object to use it here
    jsonUtil.  //this variable is  not available
}

Мой JsonUtil

import com.fasterxml.jackson.databind.ObjectMapper;

@Component
public class JsonUtil {

    @Autowired
    private ObjectMapper objectMapper;


    public JsonUtil(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
    }


    public JsonNode getStringAsJson(String value) {
        try {
            return objectMapper.readTree(value);
        }catch (IOException e) {
            String msg = e.getMessage();
            LOG.info(msg);
        }
        return null;
    }
}

Любая помощь приветствуется

1 Ответ

0 голосов
/ 24 сентября 2018

Вы пытаетесь использовать переменную экземпляра внутри статической функции.Это невозможно.Подумайте об этом так, может быть множество экземпляров класса, каждый из которых имеет свою особую переменную экземпляра.Как статический метод узнает, какой из них выбрать.

Вы должны сделать методы нестатичными, чтобы он работал.

Однако, если вы решили сделать функцию статической, сделайте переменную такжестатические и поскольку вы не можете автоматически связывать статические поля, попробуйте что-то вроде этого

private static JsonUtil jsonUtil;

@Autowired
ApplicationContext ctx;

@PostConstruct
public void init() {
    jsonUtil = ctx.getBean(JsonUtil.class);
}
...