【问题标题】:Flutter - Send Json over HTTP PostFlutter - 通过 HTTP Post 发送 Json
【发布时间】:2018-11-20 07:49:47
【问题描述】:

我正在尝试通过 HTTP 帖子发送 Json 以更新我的数据库中的记录。我已连接到服务器,但在运行请求时收到 415“不支持的媒体类型”错误。

import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {

@override
Widget build(BuildContext context) {
return new MaterialApp(
  home: new MyHomePage(),
);
}
}

class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
String url = 'http://<Hostname>: 
<Port>/jderest/orchestrator/JDE_ORCH_Sample_UpdateMeterReadings_Generic';


Future<String> makeRequest() async {
var response = await http
    .post(Uri.encodeFull(url), body: json.encode({
  "NewHourMeterReading": "650",
  "EquipmentNumber": "34665",
  "NewFuelMeterReading": "650"
}), headers: {"Accept": "application/json"});

print(response.body);

}

@override
Widget build(BuildContext context) {
return new Scaffold(
    body: new Center(
        child: new RaisedButton(
          child: new Text('Make Request'),
          onPressed: makeRequest,
        )));
}
}

谁能告诉我如何解决这个错误?

我面临的错误是这样的。

I/flutter (5881):不支持的媒体类型

Screenshot of Response Headers/Status Code/Body

抱歉,代码乱七八糟,它没有复制粘贴到每一口井上。

【问题讨论】:

  • 请显示您请求的响应(标题和正文)的屏幕截图。您可以使用 PostMan 或类似的东西来完成
  • 我在问题中添加了标题/状态码/正文响应屏幕截图。
  • 你在发布text/html的内容吗?

标签: flutter


【解决方案1】:

您正在使用不完整的标头来发送 json 有效负载。这就是服务器不接受您的请求的原因。

请改用以下标题:

headers: {
        "content-type" : "application/json",
        "accept" : "application/json",
      },

【讨论】:

    【解决方案2】:

    您必须将content-type 添加到您的标题中,将其值设置为application/json

    通过指定Accept,您是说您的客户能够理解该响应类型,而不是您的请求内容属于JSON 类型。

    基本上你是在说“嘿,我能理解 JSON,所以你可以把它发给我,我会很好的”,但你不是说“嘿,我要发送你是 JSON,做好准备!”

    为了更好地理解,你可以找到更多关于AccepthereContent-typehere的信息。

    【讨论】:

    • 很高兴听到这个消息 :) 编码愉快!
    【解决方案3】:

    使用以下方式发送 Json 并接受 Json:-

        Future<String> addData(Map<String, dynamic> request) async {
        final url = 'http_url';
        try {
          final response = await http.post(url,
              headers: {
            "content-type" : "application/json",
            "accept" : "application/json",
          },
          body: jsonEncode(request));
          final responseData = jsonDecode(response.body) as Map<String,dynamic>;
          return responseData['message'];
        } catch (error) {
          throw error;
        }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多