更改内容 - 使用application / x-www-form-urlencoded发送的处理XML的请求的类型

时间:2015-11-17 08:43:11

标签: java android xml groovy content-type

请有人在下面给我一个提示。感谢。

我们使用内容类型" application / x-www-form-urlencoded"来自请求中的服务器的XML内容。

我们尝试在Groovy中将请求读作XML并收到以下错误。 [致命错误]:1:1:文件过早结束。 2015-11-16 17:15:26,777 errors.GrailsExceptionResolver处理请求时发生SAXParseException:[POST] / games / api / v1 / endpoint 文件过早结束.. Stacktrace如下:

遗憾的是,我们无法更改服务器上的内容类型。

我们尝试创建一个代理来从服务器获取请求,并将内容类型更改为" application / xml"然后重定向到实际端点,以便我们可以正确读取XML。

   @Controller
    @EnableAutoConfiguration
    public class SampleController {

        @RequestMapping(value = "/e2-proxy", method = RequestMethod.POST)
        String home(HttpServletRequest request) {

        InputStreamEntity requestEntity = null;
        try {
            requestEntity = new InputStreamEntity(request.getInputStream(),ContentType.create("text/xml", Consts.UTF_8));
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        HttpPost httppost = new HttpPost("URL");
          httppost.setEntity(requestEntity);
          requestEntity.setChunked(true);
          requestEntity.setContentType("text/xml");
          httppost.setHeader(HTTP.CONTENT_TYPE, "text/xml");

          HttpClient client = HttpClients.createDefault();
          try {
                client.execute(httppost);
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }       

            return "";
        }
    }

使用Apache HttpClient进行请求重定向。但是,在更改内容类型后,我们仍然无法读取XML。

请帮助验证解决方案,了解必定出错的地方,并提出任何替代方案。

1 个答案:

答案 0 :(得分:0)

请尝试这个,你需要添加一个字符集。

httppost.setHeader(HTTP.CONTENT_TYPE,"text/xml; charset=\"utf-8\"");