【发布时间】:2017-09-07 18:12:36
【问题描述】:
我有一些代码试图自动装配一个包含 Spring Boot 类 RestTemplate 的 Bean。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.filter.GenericFilterBean;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
public class JWTAuthenticationFilter extends GenericFilterBean{
@Autowired
RequestPublicKey requestPublicKey;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
System.out.println(requestPublicKey.getPublicKey());
filterChain.doFilter(request, response);
}
}
RequestPublicKey 类的初始代码如下所示:
@Component
public class RequestPublicKey {
public String getPublicKey(){
RestTemplate restTemplate = new RestTemplate();
String publicCreds = restTemplate.getForObject("http://localhost:8081/get-public-key?kid=bf3b7429-261e-48c5-8409-79e1c9f203de", String.class);
return publicCreds;
}
}
当我尝试 Autowire RequestPublicKey 时,它会返回 null。我认为这是因为我用RestTemplate restTemplate = new RestTemplate() 实例化了RestTemplate。为了解决这个问题,我尝试像这样 Autowire RestTemplate
@Component
public class RequestPublicKey {
@Autowired
private RestTemplate restTemplate;
public String getPublicKey(){
String publicCreds = restTemplate.getForObject("http://localhost:8081/get-public-key?kid=bf3b7429-261e-48c5-8409-79e1c9f203de", String.class);
return publicCreds;
}
}
但后来我得到了Could not autowire. No beans of type RestTemplate found。
是否可以自动装配 Spring Boot 类?还是应该像 RequestPublicKey requestPublicKey = new RequestPublicKey() 一样实例化 RequestPublicKey?
【问题讨论】:
-
你是否在配置中定义了
RestTemplatebean?我怀疑你没有 -
@Mr.Arjun。没有没有在配置中定义它。你有什么例子吗?抱歉,我刚开始学习 Spring Boot 和 Spring。
-
你可以编辑问题并在那里添加配置代码
-
没有必要将
RestTemplate设为spring bean。但是你是说如果你在任何地方自动连接RequestPublicKey它是空的。这不应该是这样。你能展示一下RequestPublicKey是自动连线的类吗? -
尝试在RequestPublicKey上添加构造函数
标签: spring spring-boot