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

Flutter开发中API认证请求体含美元符号引发Dart语法错误的技术问询

关于HTTP POST请求体中$符号的解释及Dart语法错误解决

首先,先帮你理清两个核心问题:这个$符号的含义,以及怎么搞定Dart里的语法报错。


1. 请求体中$符号的含义

这个带$的结构大概率是XML转JSON的序列化产物,很多后端框架(比如Java的JAXB、部分SOAP服务转JSON的工具)在把XML结构转换成JSON时,会用$作为键名来表示XML元素的文本内容。举个例子,对应的XML可能是这样的:

<requestBody>
  <NOMUSU>USUARIOTESTE</NOMUSU>
  <INTERNO>123456</INTERNO>
  <KEEPCONNECTED>S</KEEPCONNECTED>
</requestBody>

转成JSON后,就变成了你看到的{"NOMUSU": {"$": "USUARIOTESTE"}}这种格式——$就是后端约定好的、用来承载字段实际值的键名,你不需要修改它,只要按照API要求的结构发送就行。


2. 解决Dart的语法错误

Dart里的对象字面量,键名如果是特殊字符(比如$),不能直接作为标识符使用,必须用引号包裹。你之前的写法因为直接写$触发了missing_identifier错误,修改成下面两种方式都可以:

方式一:用引号包裹并转义(双引号场景)

final requestBody = {
  "serviceName": "MobileLoginSP.login",
  "requestBody": {
    "NOMUSU": { "\$": "USUARIOTESTE" },
    "INTERNO": { "\$": "123456" },
    "KEEPCONNECTED": { "\$": "S" }
  }
};

方式二:用原始字符串(更简洁)

用r'$'这种原始字符串写法,不需要转义$:

final requestBody = {
  "serviceName": "MobileLoginSP.login",
  "requestBody": {
    "NOMUSU": { r'$': 'USUARIOTESTE' },
    "INTERNO": { r'$': '123456' },
    "KEEPCONNECTED": { r'$': 'S' }
  }
};

3. 完整的请求示例(用http包)

如果用Dart的http包发送请求,记得把请求体转成JSON字符串:

import 'dart:convert';
import 'package:http/http.dart' as http;

Future<void> callAuthApi() async {
  final apiUrl = Uri.parse('你的认证API端点地址');
  
  final requestBody = {
    "serviceName": "MobileLoginSP.login",
    "requestBody": {
      "NOMUSU": { r'$': 'USUARIOTESTE' },
      "INTERNO": { r'$': '123456' },
      "KEEPCONNECTED": { r'$': 'S' }
    }
  };

  final response = await http.post(
    apiUrl,
    headers: {'Content-Type': 'application/json'},
    body: jsonEncode(requestBody),
  );

  // 处理响应逻辑,比如解析返回结果
  if (response.statusCode == 200) {
    final responseData = jsonDecode(response.body);
    // 后续操作...
  } else {
    // 处理错误
    print('请求失败:${response.statusCode}');
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:48:14