Java 如何让ClientHttpRequestInterceptor工作?
我正在尝试让ClientHttpRequestInterceptor在以下情况下工作。问题是clienthtprequestinterceptor从未被调用 我对HandlerInterceptor和HandlerInterceptorAdapter拦截器也有类似的问题。问题是我需要添加一个监听器,我发现99%的文章没有提到Java 如何让ClientHttpRequestInterceptor工作?,java,spring,spring-boot,resttemplate,Java,Spring,Spring Boot,Resttemplate,我正在尝试让ClientHttpRequestInterceptor在以下情况下工作。问题是clienthtprequestinterceptor从未被调用 我对HandlerInterceptor和HandlerInterceptorAdapter拦截器也有类似的问题。问题是我需要添加一个监听器,我发现99%的文章没有提到 @Configuration public class ListenerConfig implements WebApplicationInitializer {
@Configuration
public class ListenerConfig implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext sc) throws ServletException {
sc.addListener(new RequestContextListener());
}
}
我猜Spring已经发生了一些变化,默认情况下侦听器不在那里
有人知道ClientHttpRequestInterceptor的听众吗
拦截器:
public class LoggingInterceptor implements ClientHttpRequestInterceptor {
static Logger LOGGER = LoggerFactory.getLogger(LoggingInterceptor.class);
@Override
public ClientHttpResponse intercept(
HttpRequest req, byte[] reqBody, ClientHttpRequestExecution ex) throws IOException {
LOGGER.debug("Request body: {}", new String(reqBody, StandardCharsets.UTF_8));
ClientHttpResponse response = ex.execute(req, reqBody);
InputStreamReader isr = new InputStreamReader(
response.getBody(), StandardCharsets.UTF_8);
String body = new BufferedReader(isr).lines()
.collect(Collectors.joining("\n"));
LOGGER.debug("Response body: {}", body);
return response;
}
}
RestClientConfig:
@Configuration
public class RestClientConfig {
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
List<ClientHttpRequestInterceptor> interceptors
= restTemplate.getInterceptors();
if (CollectionUtils.isEmpty(interceptors)) {
interceptors = new ArrayList<>();
}
interceptors.add(new LoggingInterceptor());
restTemplate.setInterceptors(interceptors);
return restTemplate;
}
}
@配置
公共类RestClientConfig{
@豆子
公共RestTemplate RestTemplate(){
RestTemplate RestTemplate=新RestTemplate();
列出拦截器
=restTemplate.getInterceptors();
if(CollectionUtils.isEmpty(拦截器)){
拦截器=新的ArrayList();
}
添加(新的LoggingInterceptor());
restTemplate.setInterceptors(拦截器);
返回REST模板;
}
}
这可能与。Spring RestTemplate拦截器有关,它只在客户端(使用者)或测试中工作,其中测试充当客户端,您有一个
RestTemplate
。我正在尝试登录服务器(生产者)端。因此,无需使用RestTemplate
Bealdung.com上的Loredana很好地给我发了一封电子邮件,指出我有一个误解
我在某个地方找到了Spring,它使用RestTemplate
在Rest控制器中自动解码和编码POJO。这是不正确的
@Tashkhishi还指出commets中缺少一个
RestTempale
。Spring RestTemplate拦截器,仅在客户端(消费者)或测试中工作,其中测试充当客户端,您有一个RestTemplate
。我正在尝试登录服务器(生产者)端。因此,无需使用RestTemplate
Bealdung.com上的Loredana很好地给我发了一封电子邮件,指出我有一个误解
我在某个地方找到了Spring,它使用RestTemplate
在Rest控制器中自动解码和编码POJO。这是不正确的
@Tashkhishi还指出commets中缺少一个
RestTempale
。如果你的RestTemplate
工作正常,但拦截器没有添加,请把你使用RestTemplate
的代码部分放进去。这是一个简单的REST服务。没有RestTemplate
代码,只有带有@RestController
注释的控制器。在映射方法中使用@RequestBody
的,应该调用restemplate
。控制器工作正常。您的控制器中有@Autowired
吗?是的,对于服务,控制器调用@Autowired
。该服务构建了一个自定义响应模型,控制器返回该模型,Spring将其转换为响应的JSON主体。如果您的RestTemplate
工作正常,但没有添加拦截器,请将使用RestTemplate
的代码部分放入其中。这是一个简单的REST服务。没有RestTemplate
代码,只有带有@RestController
注释的控制器。在映射方法中使用@RequestBody
的,应该调用restemplate
。控制器工作正常。您的控制器中有@Autowired
吗?是的,对于服务,控制器调用@Autowired
。该服务构建一个自定义响应模型,控制器返回该模型,Spring将其转换为响应的JSON主体。