Volley Content-Type标头未更新

时间:2014-10-07 22:41:44

标签: android android-volley

我正在尝试在Volley中编写POST调用,以将XML正文发送到服务器。我无法正确设置Content-Type标题。

基本StringRequest如下所示:

StringRequest folderRequest =
        new StringRequest(Method.POST, submitInterviewUrl, myListener, myErrorListener)
    {
        @Override
        public byte[] getBody() throws AuthFailureError
        {
            String body = "some text";
            try
            {
                return body.getBytes(getParamsEncoding());
            }
            catch (UnsupportedEncodingException uee)
            {
                throw new RuntimeException("Encoding not supported: "
                        + getParamsEncoding(), uee);
            }
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError
        {
            Map<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "application/xml");
            return headers;
        }
    };

我覆盖getHeaders()以提供我想要的Content-Type标题 - application/xml

这是基于与此类似的建议问题:


发送请求后,Volley自动添加了第二个Content-Type标头,因此标题如下所示:

Content-Type: application/xml
Content-Type: application/x-www-form-urlencoded; charset=UTF-8

如何设置正确的标题?或删除不正确的标题?

我试过跟踪基础Request代码,但无法找到这个额外标题的来源。

1 个答案:

答案 0 :(得分:27)

Content-Type标题的处理方式与Volley的其他标题不同。特别是,覆盖getHeaders()以更改内容类型并不总是有效。

执行此操作的正确方法是覆盖getBodyContentType()

    public String getBodyContentType()
    {
        return "application/xml";
    }

我通过查看JsonRequest类的代码找到了这个。

Delyan在回答这个相关问题时也提到了这一点: