我有一些代码尝试自动装配包含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;
}
}
当我尝试自动加载RequestPublicKey
时,它会返回null
。我认为这是因为我用RestTemplate
实例化了RestTemplate restTemplate = new RestTemplate()
。为了解决这个问题,我试图像这样自动加载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 requestPublicKey = new RequestPublicKey()
?
答案 0 :(得分:0)
正如评论中已经说过的,Spring不会自动为您提供RestTemplate。所以你要么自己设置它,比如说。
@Configuration
public class MyConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
或者你使用Spring(引导)提供的RestTemplateBuilder,所以可以让Spring将它注入你的代码。
@Component
public class RequestPublicKey {
private final RestTemplate restTemplate;
@Autowired
public RequestPublicKey(RestTemplateBuilder restTemplateBuilder) {
this.restTemplate = restTemplateBuilder.build();
}
...
这有一些好处,比如Spring为你设置HttpMessageConverters,你可以使用RestTemplateCustomizer。请参阅Spring Boot Docs。
中的详细信息希望这有帮助。
答案 1 :(得分:0)
我现在就开始工作了。我有两个自动装配问题。第一个问题是,GenericFilterBean
的自动装配需要一些额外的设置。我找到了设置here (link to SO)和here (link to SO)的方法。第二个问题是如何自动装配RestTemplate
。我和Ralf's solution一起去了。感谢您的帮助。