admin 管理员组文章数量: 1103785
目录
1、解决办法:
RestTemplateConfig
过滤器实例化类代码:
2、错误原因:
最后可以使用Spring默认的建造模式进行解决处理,最简单的实例化解决办法
1、解决办法:
@Autowired
private RestTemplate restTemplate; 这个null,没有实例化导致Map注入null是不行的
解决办法,添加个配置实例话restTemplate类主要java代码如下:
RestTemplateConfig
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import java.util.Collections;
/********************************************
* 模块名称:
* 主要功能是做
* HttpMessageConverter 对象转换器
* ClientHttpRequestFactory 默认是JDK的HttpURLConnection
* ResponseErrorHandler 异常处理
* ClientHttpRequestInterceptor 请求拦截器
* @author
* @date 2021/9/24 15:30
* @version 2021/9/24 15:30-01 v1.0.0.0
*******************************************/
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setRequestFactory(simpleFactory());
//添加请求拦截器日志
restTemplate.setInterceptors(Collections.singletonList(new RequestResponseLoggingInterceptor()));
restTemplate.setRequestFactory(simpleFactory());
return restTemplate;
}
@Bean
public ClientHttpRequestFactory simpleFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
// 响应超时时间20s
factory.setReadTimeout(20 * 1000);
// 连接超时10s
factory.setConnectTimeout(10 * 1000);
return factory;
}
}
过滤器实例化类代码:
RequestResponseLoggingInterceptor
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.util.StreamUtils;
import java.io.IOException;
import java.nio.charset.Charset;
/********************************************
* 模块名称:
* 主要功能是做 RestTemplateConfig 的过滤器配置
* @author 好爱你啊
* @date 2021/9/24 15:34
* @version 2021/9/24 15:34-01 v1.0.0.0
*******************************************/
@Slf4j
public class RequestResponseLoggingInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
//请求前日志打印
logRequest(request, body);
ClientHttpResponse response = execution.execute(request, body);
//请求返回数据日志打印
logResponse(response);
return response;
}
private void logRequest(HttpRequest request, byte[] body) throws IOException {
if (log.isDebugEnabled()) {
log.debug("===========================request begin================================================");
log.debug("URI : {}", request.getURI());
log.debug("Method : {}", request.getMethod());
log.debug("Headers : {}", request.getHeaders());
log.debug("Request body: {}", new String(body, "UTF-8"));
log.debug("==========================request end================================================");
}
}
private void logResponse(ClientHttpResponse response) throws IOException {
if (log.isDebugEnabled()) {
log.debug("============================response begin==========================================");
log.debug("Status code : {}", response.getStatusCode());
log.debug("Status text : {}", response.getStatusText());
log.debug("Headers : {}", response.getHeaders());
log.debug("Response body: {}", StreamUtils.copyToString(response.getBody(), Charset.defaultCharset()));
log.debug("=======================response end=================================================");
}
}
}
2、错误原因:
并没有使真正的实例化好restTemplate这个对象,导致注入null不被允许,异常抛出;
2021-09-24 15:14:08.734|ERROR|main|40|o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Field restTemplate in com.datadevelopment.npp.web.service.impl.UserFacadeProxyServiceImpl required a bean of type 'org.springframework.web.client.RestTemplate' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
主要是依赖配置有问题!
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.web.client.RestTemplate' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1717)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1273)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
... 32 common frames omitted
最后可以使用Spring默认的建造模式进行解决处理,最简单的实例化解决办法
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Autowired
RestTemplateBuilder builder;
@Bean
public RestTemplate restTemplate(){
return builder.build();
}
}
本文标签: 原因 dependency Unsatisfied expressed RestTemplate
版权声明:本文标题:Unsatisfied dependency expressed through field ‘restTemplate‘ 定位原因问题解决 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.520sys.cn/xp/1755028263a1458718.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论