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