出口电商网站建设程序,网站开发的,做一个购物网站,外贸网站 seoCannot cast org.springframework.http.client.InterceptingClientHttpRequestFactory to org.springframework.http.client.OkHttp3ClientHttpRequestFactory 由于RestTemplate在自定义初始化时顺序比较早#xff0c;想在启动后跟进yum或者注解配置修改初始化的值时#xff… Cannot cast org.springframework.http.client.InterceptingClientHttpRequestFactory to org.springframework.http.client.OkHttp3ClientHttpRequestFactory 由于RestTemplate在自定义初始化时顺序比较早想在启动后跟进yum或者注解配置修改初始化的值时直接修改是不能转换成功的如下
RestTemplate restTemplate GlobalContext.getApplicationContext().getBean(RestTemplate.class);
OkHttp3ClientHttpRequestFactory requestFactory (OkHttp3ClientHttpRequestFactory) restTemplate.getRequestFactory();
requestFactory.setReadTimeout(event.getRpcTimeOut());
这样直接改是会报错Cannot cast org.springframework.http.client.InterceptingClientHttpRequestFactory to org.springframework.http.client.OkHttp3ClientHttpRequestFactory 解决方案通过反射设置可访问可写 ReflectionUtils.makeAccessible
将字段设置可访问可写。本质就是调用field.setAccessible(true)让非public修饰的字段可以操作如protected、private修饰的字段。 public static void makeAccessible(Field field) {if ((!Modifier.isPublic(field.getModifiers()) ||!Modifier.isPublic(field.getDeclaringClass().getModifiers()) ||Modifier.isFinal(field.getModifiers())) !field.isAccessible()) {field.setAccessible(true);}} 实例代码
try { Field field InterceptingClientHttpRequestFactory.class.getSuperclass().getDeclaredField(requestFactory); ReflectionUtils.makeAccessible(field); OkHttp3ClientHttpRequestFactory okHttp3ClientHttpRequestFactory (OkHttp3ClientHttpRequestFactory) field.get(factory); okHttp3ClientHttpRequestFactory.setReadTimeout(event.getRpcTimeOut()); okHttp3ClientHttpRequestFactory.setWriteTimeout(event.getRpcTimeOut());
} catch (Exception e) { System.out.println(ReflectionUtils.makeAccessible error: e.getMessage()); }