在打印中出现休息请求错误的问题

问题描述 投票:0回答:1

以下代码示例是一个GET请求表单,该请求从Spring服务器检索用户电子邮件,当用户无效时,该电子邮件将引发异常。

无法从主体含义中捕获错误的问题,如果我显式打印主体消息,则可以看到它。

目的是查看错误消息给客户端,如果细节有问题

  Future<bool> fetchUser(username) async {

        setLoading(true);
        await RestRequest(username).fetchUser().then((data) {

          if (data.statusCode == 200) {
            setUser(User.fromJson(json.decode(data.body)));
            //print("got to ok code");
          }
          else{
           //print(data.headers.);
          }
     }
    ).catchError((error) {
      //TODO: handle errors
       errorMessage = jsonDecode(error.toString())["message"];
      throw(errorMessage);
    });

并且当我打印data.body时看到错误。

 I/flutter (10871): {"timestamp":"2020-05-20T08:40:40.205+0000","status":500,"error":"Internal Server Error","message":"could not find user for email:a","trace":"acs.logic.EntityNotFoundException: could not find user for email:a\r\n\tat acs.logic.UserServiceWithDB.getUser(UserServiceWithDB.java:71)\r\n\tat acs.logic.UserServiceWithDB.login(UserServiceWithDB.java:79)\r\n\tat acs.logic.UserServiceWithDB$$FastClassBySpringCGLIB$$879f73c1.invoke(<generated>)\r\n\tat org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n\tat org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:687)\r\n\tat acs.logic.UserServiceWithDB$$EnhancerBySpringCGLIB$$647f71c3.login(<generated>)\r\n\tat acs.rest.UserController.login(UserController.java:29)\r\n\tat jdk.internal.reflect.GeneratedMethodAccessor71.invoke(Unknown Source)\r\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.base/java.lang.reflect.Method.inv

FetchUser函数

将'package:http / http.dart'导入为http;

class RestRequest {

   final String userEmail;
   final int port=8091;


  RestRequest(this.userEmail);


  Future<http.Response> fetchUser() {
    print(this.userEmail);
    return http.get('http://192.168.1.30:8091/acs/users/login/${this.userEmail}');
  }
}
flutter dart
1个回答
0
投票

我做了一个工作样本,向您展示了如何解析身体。检查statusCode 200之后,jsonDecode“ body”并查找字段“ status”;如果它是“ 500”,则获取“错误”字段:

import 'package:flutter/material.dart';
import 'dart:convert';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  final String body = """
  {"timestamp":"2020-05-20T08:40:40.205+0000","status":500,"error":"Internal Server Error","message":"could not find user for email:a","trace":""}
  """;

  Future<String> fetchUser(username) async {
    print("fetchUser");
    Map res = jsonDecode(body);

    print(res);
    if (res["status"] == 500) {
      return res["error"].toString();
    } else {
      //setUser(User.fromJson(json.decode(data.body)));
      return "got to ok code";
    }
  }

  @override
  Widget build(BuildContext context) {
    print("build");
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: FutureBuilder(
              future: fetchUser("Bill"),
              builder: (_, snap) {
                if (snap.hasData) return Text("${snap.data}");
                return Text("wait");
              }),
        ),
      ),
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.