OkHttpClient优雅的post调用方式

目录

  • 推荐公众号
  • 问题描述
  • OkHttpClient优雅的post调用方式

推荐公众号

有彩蛋哦!!!(或者公众号内点击网赚获取彩蛋)
程序员探索之路

问题描述

今天同事在用OkHttpClient调用一个其他公司写的数据服务接口的时候,返回415,不支持的媒体类型,这种一般情况下是没有在请求头里加Content-Type=application/json导致的

OkHttpClient优雅的post调用方式

在看对方写的数据接口说明文档时没有发现有什么异常,既然在请求头上加了Content-Type=application/json,那么请求参数是否也需要指定的,我把同事通过FormBody构建的RequestBody改为了RequestBody.create(JSON,json);的方式,JSON是指定的MediaType;经过测试调用成功

OkHttpClient
    1.构建requestBody
    public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    Map<String, String> param = Maps.newHashMap();
    param.put("key", value);
    RequestBody loginBody = 
    RequestBody.create(JSON, com.alibaba.fastjson.JSON.toJSONString(param));
    
    2 调用接口Response loginRes = HttpUtil.httpPost(url, loginBody);
    public static Response httpPost(String url, RequestBody requestBody) throws IOException {
        OkHttpClient client = new OkHttpClient();
        Request request=new Request.Builder()
            .url(url)
            .post(requestBody)
            .addHeader("Content-Type", "application/json")
            .build();
        Response response = client
            .newCall(request)
            .execute();
        if (response.isSuccessful()) {
            return response;
        } else {
            throw new IOException("Unexpected code " + response);
        }
    }

你可能感兴趣的:(OkHttpClient)