java - Android 没有捕获 Jersey RESTful 异常

标签 java android spring jersey android-annotations

我有一个使用 AndroidAnnotations 和 Spring Rest 模板使用 RESTful 服务的 Android 应用程序。

服务正在正常使用,但是当 RESTful 服务抛出未处理的异常时,Android 应用程序停止运行并关闭,即使 try catch 包含服务使用也是如此。

android-app:

@RestService
protected StudentRESTfulClient mStudentRESTfulClient;

@Click(R.id.register_button)
public void register(Student user) {
    try {
        this.mStudentRESTfulClient.insert(user);
    } catch (Exception exception) {
        // This block is not executed...
    }
}

restful-app:

@POST
public Student insert(Student entity) {
    this.getService().insert(entity); // Throw the exception here!
    return entity;
}

我知道在 RESTful 服务中没有处理异常,但我希望我的 Android 应用程序能够捕获此类问题并向用户显示友好消息。 但是即使用try catch也会出现如下错误:

01-11 00:44:59.046: E/AndroidRuntime(5291): FATAL EXCEPTION: pool-1-thread-2
01-11 00:44:59.046: E/AndroidRuntime(5291): org.springframework.web.client.HttpServerErrorException: 500 Internal Server Error
01-11 00:44:59.046: E/AndroidRuntime(5291): at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:78)
01-11 00:44:59.046: E/AndroidRuntime(5291): at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:524)

Git 存储库,如果他们想查看整个项目:https://github.com/veniltonjr/msplearning

已经,谢谢!

最佳答案

在服务器异常的情况下向用户显示友好消息的方法是从 Jersey 返回错误状态代码,然后 Android 端可以处理此响应并执行操作以向用户显示出现问题的消息。

因此在您的 Jersey 代码中,您可以添加异常处理:

@POST
public Response insert(Student entity) {
    Response r;
    try {
        this.getService().insert(entity); // Throw the exception here!
        r = Response.ok().entity(entity).build();
    } catch (Exception ex) {
        r = Response.status(401).entity("Got some errors due to ...!").build();
    }
    return r;
}

在 Android 端,您可以捕获错误实体字符串 “Got some errors due to ...!” 然后您可以向用户显示有关发生的事情的适当消息。例如:

安卓端:

HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(post);
String responseText = EntityUtils.toString(response.getEntity());

这将确保在 REST 异常的情况下,Android 客户端可以处理错误并向用户显示消息。

关于java - Android 没有捕获 Jersey RESTful 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21058053/

相关文章:

java - 找不到方法 classpath() 错误

spring - Autowired 无法与 Azure 功能一起使用

java - 是否可以在一个 spring 容器中运行带有 spring security 的 spring webmvc webapp?

spring - 如何在 Springs MVC 4 中使用 HikariCP 和 JdbcTemplate

java - 如何将查询参数附加到现有 URL?

javascript - react native Android : Showing an Activity from Java

java - 如何在 Activity 中膨胀菜单

java - java中BufferReader的异常处理

android - 仅使用 Proguard 来禁用日志记录和缩减资源

android - 标签图标在棉花糖中消失了