OkHttp调用RequestBody.create传字符串列表报错,如何正确发送请求?
OkHttp 发送字符串列表请求体解决方案
报错的核心原因是OkHttp原生
RequestBody.create()方法没有提供接收List<String>类型参数的重载,仅支持字符串、字节数组、文件等单一内容类型作为入参,因此需要先将字符串列表转换为服务端可识别的单一内容格式后再构建请求体。
以下是三种常见场景的实现方案:
场景1:提交JSON格式的字符串数组(接口最常用场景)
先将列表序列化为JSON字符串,再使用application/json媒体类型构建请求体,示例代码(以Gson序列化工具为例):// 待发送的字符串列表 List<String> stringList = Arrays.asList("内容1", "内容2", "内容3"); // 序列化为JSON数组字符串 String jsonContent = new Gson().toJson(stringList); // 构建请求体 RequestBody requestBody = RequestBody.create( MediaType.parse("application/json; charset=utf-8"), jsonContent );如果使用Jackson等其他序列化工具,只需替换对应的JSON序列化逻辑即可。
场景2:以表单形式提交字符串列表
若接口要求使用x-www-form-urlencoded或form-data格式提交,使用FormBody.Builder逐个添加列表项即可,适配大部分服务端框架接收数组参数的约定:List<String> stringList = Arrays.asList("内容1", "内容2", "内容3"); FormBody.Builder formBuilder = new FormBody.Builder(); for (String item : stringList) { // 参数名后加[]适配SpringMVC、Node.js等常见服务端框架的数组参数接收规则 formBuilder.add("stringList[]", item); } RequestBody requestBody = formBuilder.build();场景3:提交纯文本格式的字符串列表
若接口要求纯文本格式,可先将列表按分隔符(逗号、换行符等)拼接为单个字符串再构建请求体:List<String> stringList = Arrays.asList("内容1", "内容2", "内容3"); // 按逗号拼接为单个字符串,可根据需求替换为换行符等其他分隔符 String plainContent = String.join(",", stringList); RequestBody requestBody = RequestBody.create( MediaType.parse("text/plain; charset=utf-8"), plainContent );
如果使用OkHttp 4.x版本,Java侧调用时若找不到create方法,可以替换为RequestBody.Companion.create()写法,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Laila Mattar
相关产品推荐
相关产品推荐

