You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中发送PUT请求?解决更新JSONStorage上JSON列表时出现415响应码的问题

在Flutter中发送PUT请求并解决JSONStorage 415错误

一、Flutter中PUT请求的实现方式

我会用官方的http包来演示,这是最常用的网络请求方式之一:

  1. 首先在pubspec.yaml中添加依赖:
dependencies:
  http: ^1.1.0

执行flutter pub get完成依赖安装。

  1. 编写PUT请求代码:
    假设你要更新JSONStorage上的整个列表,代码示例如下:
import 'package:http/http.dart' as http;
import 'dart:convert';

Future<void> updateJsonList() async {
  // 替换成你的JSONStorage资源专属URL
  final url = Uri.parse('https://app.jsonstorage.net/api/v1/json/your-resource-id');
  
  // 基于原数据修改后的新内容
  final updatedData = [
    {"username": "Amirhossein", "password": "302940101692", "email": "sahosseini1382@gmail.com", "phone": "09944236807"},
    {"username": "Hosna Updated", "password": "74610945", "email": "hosseiniamir71@gmail.com", "phone": "09353792083"}
  ];

  try {
    final response = await http.put(
      url,
      headers: {
        // 核心:必须设置正确的内容类型头
        'Content-Type': 'application/json',
        // 如果你的资源是私有,这里要添加JSONStorage要求的认证头,比如API密钥
        // 'Authorization': 'Bearer your-api-key'
      },
      // 将Dart对象编码为标准JSON字符串
      body: jsonEncode(updatedData),
    );

    if (response.statusCode == 200) {
      print('数据更新成功!');
      print('响应内容:${response.body}');
    } else {
      print('更新失败,状态码:${response.statusCode}');
      print('响应内容:${response.body}');
    }
  } catch (e) {
    print('请求出错:$e');
  }
}

如果你习惯用dio包,代码会更简洁,示例如下:

import 'package:dio/dio.dart';

Future<void> updateJsonListWithDio() async {
  final dio = Dio();
  final url = 'https://app.jsonstorage.net/api/v1/json/your-resource-id';
  final updatedData = [
    // 你的更新数据
  ];

  try {
    final response = await dio.put(
      url,
      data: updatedData,
      options: Options(
        headers: {
          'Content-Type': 'application/json',
          // 如有需要添加认证头
        },
      ),
    );
    print('更新成功:${response.data}');
  } on DioException catch (e) {
    print('请求失败:${e.response?.statusCode} - ${e.response?.data}');
  }
}

二、排查415错误(Unsupported Media Type)的原因和解决方法

你收到的415错误,本质是服务器无法识别你发送的请求体的媒体类型,结合JSONStorage的使用场景,主要有以下几个可能:

  • 未设置Content-Type: application/json请求头
    这是最常见的原因!JSONStorage要求PUT请求的请求体是JSON格式,必须在请求头里明确告知服务器你发送的是JSON数据。如果没加这个头,服务器会默认识别为其他格式(比如form-data),直接返回415。解决方法就是在PUT请求的headers里加上这个字段,参考上面的代码示例。

  • 请求体不是有效的JSON格式
    比如你直接把Dart对象传给body,没有用jsonEncode(http包)处理,导致发送的是Dart对象的字符串形式(比如[Instance of 'Map', Instance of 'Map']),这不是标准JSON,服务器无法解析。解决方法:http包必须用jsonEncode()转换,dio包则会自动帮你完成编码。

  • 请求格式不符合JSONStorage要求
    虽然JSONStorage支持直接发送数组,但如果你的更新内容格式和原始数据不一致(比如原始是数组,你却发送了单个对象),也可能触发错误。确保更新的请求体和原始数据结构一致即可。

  • 认证信息缺失(间接影响)
    如果你的资源是私有,未提供正确的认证头可能导致服务器返回异常状态码,虽然不是直接引发415,但建议确认是否需要添加API密钥等认证信息。

最后验证步骤

  1. 确认请求头包含Content-Type: application/json;
  2. 确认请求体是经过jsonEncode处理的标准JSON字符串;
  3. 可以先用Postman等工具测试PUT请求,确认能成功更新后,再对照着写Flutter代码,这样更容易定位问题。

内容的提问来源于stack exchange,提问作者samirhossein__

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 20:17:29