【问题标题】:Extracting and displaying error message in Angular JS在 Angular JS 中提取和显示错误消息
【发布时间】:2015-12-10 16:12:28
【问题描述】:

在 Angular JS web 应用程序中,如果我的 rest API 返回异常(未处理的抛出),我如何向前端显示适当的错误。

目前我只能显示一般错误“创建记录时出错”。但无法从异常中检索到确切的错误消息

控制器

    $http.post("/mdmservice/services/entity", $scope.entity).success(function(data, status, headers, config, statusText) {
        $scope.created=true;
        $scope.buttonsDisabled = true;          
        $scope.entityCreatedMessage = "New record created successfully.";
        $scope.error=false;
    }).error(function(data, status, headers, config, statusText ) {
        console.log("Error creating entity : " +data +"," +status +"," +headers +"," +config +"," +statusText);
        $scope.error=true;
        $scope.errorMessage="Error creating record.";
    });

REST API

    @POST
@Path(value = "/create")
@Consumes(value = MediaType.APPLICATION_JSON)
@Override
public Long create(Eentity entity) {
    Long entityId = null;
    entity.setEntityId(null);
    entity.setIsExcluded("N");
    try {
        // For create, the editIndicator=1
        entityId = entityBusiness.createOrUpdate(entity, 1);
    } catch (Exception e) {
        throw new WebApplicationException(e);
    }
    return entityId;
}

异常日志

Caused by: com.jay.MyException: Entity code must be unique
        at com.jay.BusinessImpl.createOrUpdateEntity(EntityBusinessImpl.java:93)
        at com.jay.service.impl.EntityServiceImpl.createEntity(EntityServiceImpl.java:145)
        ... 38 more
Caused by: com.jay.common.exception.EbaDataException: Entity code must be unique
        at com.jay.mdm.data.repository.jdbc.impl.EntityRepositoryJdbcImpl.createOrUpdateEntity(EntityRepositoryJdbcImpl.java:304)
        at com.jay.mdm.business.impl.EntityBusinessImpl.createOrUpdateEntity(EntityBusinessImpl.java:91)
        ... 39 more

<Dec 10, 2015 4:08:54 PM GMT> <Warning> <org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper> <BEA-000000> <javax.ws.rs.WebApplicationException: H
TTP 500 Internal Server Error       

【问题讨论】:

  • 您可以通过data 访问successerror 的服务器响应。 $scope.entityCreatedMessage = data;
  • @user3632710 谢谢,但错误消息作为异常抛出,无法在控制器中获取这些消息。你的意思是我们永远不会抛出异常而是捕获它并在返回的对象中返回一条消息?
  • 我经常使用express而不是java,所以我真的帮不上你。也许stackoverflow.com/questions/30863177/…这个问题和你的有关?

标签: java angularjs


【解决方案1】:

您可以将错误对象绑定到您的控制器,并将其绑定到您的视图以显示异常的内容,例如:

$http.post("/mdmservice/services/entity", $scope.entity).success(function(data, status, headers, config, statusText) {
    $scope.created=true;
    $scope.buttonsDisabled = true;          
    $scope.entityCreatedMessage = "New record created successfully.";
    $scope.error=false;
}).error(function(data, status, headers, config, statusText ) {
    console.log("Error creating entity : " +data +"," +status +"," +headers +"," +config +"," +statusText);
    $scope.error = data;
});

在你看来:

Status : {{error.statusCode}}
Label : {{error.error}}

这是一个例子:http://plnkr.co/edit/UYBmz3ukMR6rhtGL6elJ?p=preview

【讨论】:

  • 谢谢。问题是如何从异常堆栈跟踪中获取错误消息到控制器....在错误块内我试图控制台.记录所有这些参数......并且无法获得错误消息......。错误(函数(数据、状态、标题、配置、状态文本){
  • 您想在客户端检索 Java 堆栈跟踪吗?在这种情况下,您必须配置服务器并让他在响应中插入堆栈跟踪。有时这可以通过将服务器切换到开发模式来完成。然后您将能够解析返回的 HTML 并将其注入您的控制器。
【解决方案2】:

使用一些 HTTP 资源测试器测试 API 端点可能会有所帮助,并查看堆栈跟踪中的错误消息是否出现在响应中的任何位置。

【讨论】:

  • 谢谢。不,异常错误消息不会出现在响应中。这是一个抛出的未处理异常。
  • 如果它没有出现在响应中,Angular 或客户端就无法获得它。找到一种在响应中包含该堆栈跟踪异常的方法。很可能,您必须更改后端/服务器端代码或配置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 2021-02-08
  • 2016-09-10
相关资源
最近更新 更多