Flutter/Dart中如何访问打印HTTP响应体内的ErrEntity字段内容
Flutter 从登录接口响应中提取ErrEntity节点方法
你当前拿到的res.body是序列化的JSON字符串,不能直接通过键名取值,需要先解码为Dart支持的Map结构,再按照JSON的嵌套层级逐层访问即可,具体实现如下:
- 第一步:在对应文件顶部引入Dart内置的JSON处理库,无需安装第三方依赖
import 'dart:convert';
- 第二步:修改原有登录请求方法,拿到响应后增加解码、取值逻辑
void sendLogin() async { var map = <String, dynamic>{ "UserName": _usernameController.text, "Password": _passwordController.text, }; var res = await http.post( Uri.parse("http://192.168.1.8:8080/HongLeong/LOGIN_REQUEST.do"), body: map, ); print(res.statusCode); print(res.body); // 将JSON字符串解码为Dart可操作的Map对象 final Map<String, dynamic> respJson = jsonDecode(res.body); // 按嵌套路径取值:根节点RESPONSE -> 子节点BASEL_RESPONSE -> 目标节点ErrEntity final Map<String, dynamic>? errEntity = respJson['RESPONSE']?['BASEL_RESPONSE']?['ErrEntity']; if (errEntity != null) { // 打印ErrEntity完整内容 print('完整错误节点内容:$errEntity'); // 按需读取节点内的单个字段 print('错误ID:${errEntity['MessageID']}'); print('错误信息:${errEntity['Message']}'); print('关联请求ID:${errEntity['last_req_id']}'); } }
代码中的
?是空安全访问符,作用是当某一层级的节点不存在时,直接返回null而不是抛出空指针崩溃,如果你能确定接口返回结构固定不会缺字段,也可以去掉这个符号。
运行后控制台就会输出你需要的ErrEntity完整内容:
完整错误节点内容:{MessageID: 1110, Message: Field Code is mandatory, last_req_id: 50029, table_id: 0, operation_id: 0}
额外提一句,从返回的错误信息Field Code is mandatory可以看出,你当前请求除了用户名、密码外还缺少必填的Code参数,这也是登录请求没有返回成功数据的原因,后续调试可以对应补上参数。
内容的提问来源于stack exchange,提问作者JoshuaaMarkk
相关产品推荐
相关产品推荐

