Spring integration http出站网关不转换法语字符
我的spring integration http出站网关是这样的。我使用我自己的rest模板与ssl连接池。我得到了500个法语字符,因此我将UTF-8和支持的媒体类型注入到消息转换器。现在,在注入之前,我注入了我自己的请求工厂和默认rest模板然后它开始接受法语字符。现在,当我改为使用自己的rest模板时,它不接受消息转换器,当我尝试将其注入rest模板时,我得到了这个异常Spring integration http出站网关不转换法语字符,spring-integration,Spring Integration,我的spring integration http出站网关是这样的。我使用我自己的rest模板与ssl连接池。我得到了500个法语字符,因此我将UTF-8和支持的媒体类型注入到消息转换器。现在,在注入之前,我注入了我自己的请求工厂和默认rest模板然后它开始接受法语字符。现在,当我改为使用自己的rest模板时,它不接受消息转换器,当我尝试将其注入rest模板时,我得到了这个异常 Cause is - Could not write request: no suitable HttpMessage
Cause is - Could not write request: no suitable HttpMessageConverter found for request type [java.lang.String] and content type [text/plain;charset=UTF-8]
这对所有的要求都有效
<int-http:outbound-gateway id='batch-http' header-mapper="headerMapper"
request-channel='toHttp'
request-factory="requestFactory"
message-converters="batchHTTPConverter"
url-expression="payload.contains('${filterAttribute}') ? '${url1}' : '${url2}'" http-method="${httpMethod}"
expected-response-type='java.lang.String' charset='${charset}'
reply-timeout='${replyTimeout}' reply-channel='output'>
</int-http:outbound-gateway>
<beans:bean id="batchHTTPConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
<beans:constructor-arg index="0" value="UTF-8"/>
<beans:property name="supportedMediaTypes" value = "application/json;UTF-8" />
</beans:bean>
<beans:bean id="requestFactory" class="test.batch.httpclient.CustomClientHttpRequestFactory">
<beans:constructor-arg ref="verifier"/>
</beans:bean>
<beans:bean id="verifier"
class="batch.NullHostnameVerifier">
</beans:bean>
这不适用于法语或任何输入请求
我的rest模板
public class BatchRestTemplate extends RestTemplate{
private static final Logger LOGGER = LoggerFactory
.getLogger(BatchRestTemplate.class);
private StringHttpMessageConverter batchHTTPConverter;
public StringHttpMessageConverter getBatchHTTPConverter() {
return batchHTTPConverter;
}
public void setBatchHTTPConverter(StringHttpMessageConverter batchHTTPConverter) {
this.batchHTTPConverter = batchHTTPConverter;
}
public BatchRestTemplate() {
super(createBatchHttpRequestFactory());
List<HttpMessageConverter<?>> messageConverters= new ArrayList<HttpMessageConverter<?>>();
messageConverters.addAll(getMessageConverters());
messageConverters.add(getBatchHTTPConverter());
super.setMessageConverters(messageConverters);
}
private static ClientHttpRequestFactory createBatchHttpRequestFactory() {
CloseableHttpClient httpClient;
HttpComponentsClientHttpRequestFactory httpRequestFactory;
final int timeout = 3000;
SSLConnectionSocketFactory socketFactory;
try {
socketFactory = new SSLConnectionSocketFactory(
SSLContext.getDefault(),
new String[] {"TLSv1"},
null,
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", socketFactory)
.build();
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
cm.setMaxTotal(700);
cm.setDefaultMaxPerRoute(300);
cm.closeExpiredConnections();
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeout)
.setConnectionRequestTimeout(timeout).setSocketTimeout(timeout).build();
httpClient = HttpClients.custom().setDefaultRequestConfig(requestConfig).setConnectionManager(cm).build();
httpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
return httpRequestFactory;
}
catch (Exception e) {
LOGGER.debug("error exception", e);
}
return null;
}
}
公共类BatchRestTemplate扩展了RestTemplate{
专用静态最终记录器记录器=记录器工厂
.getLogger(BatchRestTemplate.class);
私有StringHttpMessageConverter批处理HttpConverter;
public StringHttpMessageConverter getBatchHTTPConverter(){
返回批次HttpConverter;
}
public void setBatchHTTPConverter(StringHttpMessageConverter batchHTTPConverter){
this.batchHTTPConverter=batchHTTPConverter;
}
公共BatchRestTemplate(){
super(createBatchHttpRequestFactory());
列表>();
addAll(getMessageConverters());
添加(getBatchHTTPConverter());
super.setMessageConverters(messageConverters);
}
私有静态ClientHttpRequestFactory createBatchHttpRequestFactory(){
可关闭的httpClient httpClient;
Http组件客户端Http请求工厂Http请求工厂;
最终int超时=3000;
SSLConnectionSocketFactory socketFactory;
试一试{
socketFactory=新SSLConnectionSocketFactory(
SSLContext.getDefault(),
新字符串[]{“TLSv1”},
无效的
SSLConnectionSocketFactory。允许\u所有\u主机名\u验证程序);
注册表socketFactoryRegistry=RegistryBuilder.create()
.register(“http”,PlainConnectionSocketFactory.getSocketFactory())
.注册(“https”,socketFactory)
.build();
PoolightPClientConnectionManager cm=新的PoolightPClientConnectionManager(socketFactoryRegistry);
cm.setMaxTotal(700);
cm.setDefaultMaxPerRoute(300);
cm.closeExpiredConnections();
RequestConfig RequestConfig=RequestConfig.custom().setConnectTimeout(超时)
.setConnectionRequestTimeout(超时).setSocketTimeout(超时).build();
httpClient=HttpClients.custom().setDefaultRequestConfig(requestConfig).setConnectionManager(cm.build();
httpRequestFactory=新的HttpComponents客户端httpRequestFactory(httpClient);
返回httpRequestFactory;
}
捕获(例外e){
LOGGER.debug(“错误异常”,e);
}
返回null;
}
}
您自己的代码中有一个bug:
public BatchRestTemplate() {
..........
messageConverters.add(getBatchHTTPConverter());
..........
}
但是。。。还没有batchHTTPConverter
!。只有在setBatchHTTPConverter()
之后,它才会出现在那里
换句话说,您不能使用构造函数中的属性,因为setter是在对象实例化之后调用的
public BatchRestTemplate() {
..........
messageConverters.add(getBatchHTTPConverter());
..........
}