Spring自动接线的变量不可用

时间:2018-09-23 08:40:25

标签: java json spring spring-boot rest-client

是弹簧和弹簧靴的新手。我实际上是在尝试使用springboot中的restclient。当我编写客户端并获取响应时,我想读取响应主体(即String),并希望将其转换为JSON供我使用。因此,我编写了RestClient类,并从中自动连接了将String转换为JSON的JsonUtil类。但是我的自动装配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 :(得分:0)

您正在尝试在静态函数内使用实例变量。这是不可能的。以这种方式考虑,该类可以有许多实例,每个实例都有其自己的特定实例变量。静态方法如何知道该选择哪一个。

您应该使方法成为非静态方法以使其起作用。

但是,如果您决定将函数设为静态,请将变量也设为静态,并且由于您无法自动关联静态字段,请尝试类似的操作

private static JsonUtil jsonUtil;

@Autowired
ApplicationContext ctx;

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