OkHttp IllegalArgumentException

本文详细解析了使用Java构造HTTP URL时可能出现的IllegalArgumentException异常,并提供了正确的URL构造方式。通过实例展示了如何避免因URL格式不正确而引发的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java.lang.IllegalArgumentException: unexpected url

String url = /*错误写法*/"www.baidu.com";

String url = /*正确写法*/"http://www.baidu.com";

java.lang.IllegalArgumentException: unexpected scheme 

HttpUrl build = new HttpUrl.Builder()/*错误写法*/.scheme("http://").build();

HttpUrl build = new HttpUrl.Builder()/*正确写法*/.scheme("http").build();

HttpUrl build = new HttpUrl.Builder()/*正确写法*/.scheme("https").build();

 java.lang.IllegalArgumentException: unexpected host

HttpUrl build = new HttpUrl.Builder()/*错误写法*/.host("http://www.baidu.com").build();

HttpUrl build = new HttpUrl.Builder()/*正确写法*/.host("www.baidu.com").build();

 java.lang.IllegalArgumentException: unexpected port

HttpUrl build = new HttpUrl.Builder()/*错误写法*/.port(-1).build();

HttpUrl build = new HttpUrl.Builder()/*正确写法port在(0 - 65535)*/.port(80).build();

 测试案例

HttpUrl build = new HttpUrl.Builder()
            .scheme("http")
            .host("www.baidu.com")
            .port(80)
            .build();

更换URL案例

HttpUrl parse = HttpUrl.parse("http://www.baidu.com");

HttpUrl build = new HttpUrl.Builder().scheme(parse.scheme()).host(parse.host()).port(parse.port()).build();

 

<think>好的,我现在需要处理用户关于OkHttp中MediaType使用方法和常见问题的查询。首先,我得回忆一下之前用户提供的引用内容,里面有关于MediaType的构造函数、RequestBody的创建、以及示例代码。用户可能想知道如何正确设置MediaType,常见错误,以及如何解决相关问题。首先,我应该从基础开始,解释MediaType的作用,即指定数据的MIME类型和字符编码。然后,按照用户的引用内容,特别是引用[3]和[4],说明如何通过MediaType.parse()方法创建实例,并给出示例代码。需要强调正确的格式,比如"type/subtype; charset=utf-8",否则会抛出异常。 接下来,常见问题部分,用户可能遇到MIME格式错误、字符集未指定导致乱码、与服务器不匹配的情况。根据引用[1]中的构造函数,MediaType的各个部分(type、subtype、charset)需要正确解析。需要提醒用户注意服务器要求的类型,比如application/json和text/xml的区别,以及如何通过拦截器(引用[3]提到的)调试请求内容。另外,用户可能想知道不同数据类型的MediaType示例,比如JSON、表单数据、文件上传等,这时候需要列出常见的MIME类型,如application/json、multipart/form-data等,并给出对应的代码示例,参考引用[4]中关于RequestBody.create的部分。 最后,生成相关问题,应该围绕MediaType的解析、常见类型、与服务器不一致的解决、字符集设置,以及如何通过拦截器检查。这些问题需要覆盖用户可能遇到的疑惑点,并引导他们进一步学习。要确保所有数学公式和代码块格式正确,使用中文回答,结构清晰。同时,检查引用标记是否正确添加,比如在提到服务器不匹配时引用[3]和[4]。避免使用Markdown,保持回答自然。</think>### OKHttp MediaType使用指南 #### 一、MediaType基础作用 MediaType用于定义HTTP请求/响应体的数据类型(MIME类型)和字符编码,例如:`text/html; charset=utf-8`。其核心参数包括: - **主类型**:如`text`、`application` - **子类型**:如`html`、`json` - **字符集**:如`charset=utf-8`(可选) #### 二、使用方法 1. **创建MediaType实例** ```java // 正确格式:type/subtype; charset=xxx MediaType mediaType = MediaType.parse("application/json; charset=utf-8"); ``` - 错误格式会抛出`IllegalArgumentException`[^1] - 字符集未指定时默认使用服务器配置,可能导致乱码[^3] 2. **结合RequestBody使用** ```java // 文本数据 RequestBody body = RequestBody.create("{\"name\":\"okhttp\"}", mediaType); // 文件上传 File file = new File("test.txt"); RequestBody fileBody = RequestBody.create(file, mediaType); ``` - 文件上传需指定`multipart/form-data`类型[^4] #### 三、常见问题解决方案 1. **MIME格式错误** - **错误示例**:`MediaType.parse("json")` - **修复方案**:必须包含`type/subtype`,如`application/json` 2. **服务器返回类型不匹配** - 通过拦截器检查请求头: ```java OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(chain -> { Request request = chain.request(); Log.d("MediaType", request.body().contentType().toString()); return chain.proceed(request); }) .build(); ``` [^3] 3. **字符集乱码** - 显式声明编码:`MediaType.parse("text/plain; charset=gbk")` #### 四、常见数据类型示例 | 场景 | MediaType格式 | |--------------------|-----------------------------------| | JSON数据 | `application/json` | | 表单数据 | `application/x-www-form-urlencoded` | | 文件上传 | `multipart/form-data` | | Markdown文本 | `text/x-markdown` | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值