【问题标题】:Spring - changing Content-type HTTP headerSpring - 更改内容类型 HTTP 标头
【发布时间】:2013-10-01 16:16:42
【问题描述】:

我正在使用 Robospice 与 JSON API 进行通信。这就是我为 POST 请求设置标头的方式:

mHttpHeaders = new HttpHeaders();
mHttpHeaders.add("Content-Type", "application/json");
Log.d(Global.TAG, mHttpHeaders.toString());

问题是我得到一个看起来像这样的标题:{Content-Type=[application/json]} 我需要发送Content-Type:application/json(这似乎是我的服务器接受的唯一标题)。我找不到任何改变它的方法(尝试了add()setContentType() 方法),我该怎么做?

【问题讨论】:

    标签: java android json spring


    【解决方案1】:

    您应该尝试以下方法,它对我有用。我在 Robospice 中使用 Spring rest 模板。

    MediaType mediaType = new MediaType("application", "json");
    List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
    acceptableMediaTypes.add(mediaType);
    
    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(acceptableMediaTypes);
    

    【讨论】:

    • 它给了我{Accept=[application/json]} 标题。
    • 服务器的响应是什么?
    • 这是 500 内部服务器错误,但我已尝试使用 curl 验证该请求是否与标头有关,这似乎是服务器不接受的原因(即标头格式)请求。
    • 如果是 HTTP 500 那么应该是服务器端的问题,需要在服务器端代码中修复。我认为标头还可以,但是您可以发送更多代码以查看您是如何制作请求实体的。我猜你在其他地方也做错了。
    【解决方案2】:

    输出

    {Content-Type=[application/json]}
    

    您在Log 语句中看到的只是toString() 方法返回的String,它不是实际发送的标头。例如

    public static void main(String[] args) throws Exception {
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "application/json");
        System.out.println(headers);
    }
    

    打印

    {Content-Type=[application/json]}
    

    如果您正确使用HttpClientHttpRequestBaseHttpGetHttpPost 等),则可以正常发送标头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 2019-01-20
      • 2011-09-30
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      相关资源
      最近更新 更多