首页 > 解决方案 > Http 入站网关失败非法字符集

问题描述

我正在尝试对使用 Http 入站网关创建的服务编写集成测试,它给了我错误“java.nio.charset.UnsupportedCharsetException: cesu-8”。知道为什么吗?该服务工作正常。我们有一个包应用程序,每天使用多次。我想要一个也可以调用它的集成测试。这是我的测试:

@Test
public void receiveMessage() throws IOException {
    final String xml = testUtil.getTestDocumentAsString("/serviceTestData/document.xml");

    final RestTemplate template = new RestTemplate();
    template.getMessageConverters()
            .add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
    final HttpHeaders headers = new HttpHeaders();
    MediaType mediaType = new MediaType("text", "xml", StandardCharsets.UTF_8);
    headers.setContentType(mediaType);

    final String credentials = this.user + ":" + this.pass;
    final byte[] message = credentials.getBytes("UTF-8");
    headers.add("Authorization", "Basic " + DatatypeConverter.printBase64Binary(message));
    final HttpEntity request = new HttpEntity(xml, headers);
    final ResponseEntity<Ack> result = template.postForEntity(url, request, Ack.class);

    System.out.println(result.getBody().getStatus());
}

错误:ServletException 的根本原因。java.nio.charset.UnsupportedCharsetException:在 org.springframework 的 org.springframework.http.HttpHeaders.getAcceptCharset(HttpHeaders.java:596) 的 java.nio.charset.Charset.forName(Charset.java:536) 的 cesu-8。 integration.http.support.DefaultHttpHeaderMapper.getHttpHeader(DefaultHttpHeaderMapper.java:963) 在 org.springframework.integration.http.support.DefaultHttpHeaderMapper.toHeaders(DefaultHttpHeaderMapper.java:460) 在 org.springframework.integration.http.support.DefaultHttpHeaderMapper。 toHeaders(DefaultHttpHeaderMapper.java:72) at org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport.actualDoHandleRequest(HttpRequestHandlingEndpointSupport.java:459) at org.springframework.integration.http.inbound。

标签: springhttpcharacter-encodinggatewayinbound

解决方案


我不熟悉 Java 或 Spring,但是:

错误:ServletException 的根本原因。java.nio.charset.UnsupportedCharsetException: cesu-8

在 java.nio.charset.Charset.forName(Charset.java:536)

在 org.springframework.http.HttpHeaders.getAcceptCharset(HttpHeaders.java:596)

[...]

在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)

这表明您的测试请求包含类似的 HTTP 标头Accept-Charset: cesu-8,您的服务器无法解释该标头。

您的请求似乎是由RestTemplate班级生成的。检查它对标题的作用。搜索Accept-Charset(或AcceptCharsetcesu-8,特别是。


推荐阅读