angular - HttpErrorResponse 无法从 HttpServletResponse 获得预期的响应

标签 angular http interceptor

我是 angular2 的新手,现在我使用拦截器从服务器获取响应

当我返回 401 错误时,我的 java 服务器代码如下:

// httpServletResponse's type is HttpServletResponse    
httpServletResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
httpServletResponse.getWriter().write("required login");

和我的 angular2 代码拦截器是这样的:

 intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.rest = this.inj.get(RestProvider);
return next.handle(req).catch(err =>{
  console.log(err);
});

然后err就这么糊涂了: HttpErrorResponse

status一直是0,没有收到服务器的错误信息,但是chrome开发者工具上的网络可以收到响应: headers

(不好意思我没有权限上传图片,只有两个链接) 我已经搜索了很多关于这个的问题,但也无法解决我的问题。谁能帮帮我?非常感谢!

最佳答案

很抱歉这么晚才回复。 angular2好像不能解析HttpServletResponse,我换个方式解决:

如果出现 401 错误,我将重定向到 'unauthorized' by forward

 httpServletRequest.getRequestDispatcher("unauthorized").forward(httpServletRequest,httpServletResponse);

然后在我的“未授权”中:

 @GET
@Path("unauthorized")
public Response unAuthorized(){
    return RestResult.failure(401,"need login",401);
}

RestRsult是一个类封装了一些响应:

public static Response failure(int errorcode, String errormsg,int status) {
    ResponseFailureObj result = new ResponseFailureObj(errorcode, errormsg);
    return Response.status(status).type(MediaType.APPLICATION_JSON).entity(result).build();
}

然后,我将在 angular2 HttpErrorResponse 上收到状态 401 并收到错误消息,而不是未知错误或空消息。

关于angular - HttpErrorResponse 无法从 HttpServletResponse 获得预期的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48070031/

相关文章:

angular - Protractor 测试重定向

angular - 如何使用带有异步管道和变化检测的 Material 表? (工作不正常)

java - 如何清理JAVA应用程序的缓存

reactjs - 使用自定义Axios和redux-saga处理错误

java - 如何为 JUnit 测试声明 "mixins"?

ruby-on-rails - Rails 邮件拦截器仅用于特定邮件程序

javascript - Angular 中有带验证的输入框时,需要点击两次才能将控制权转移到单选按钮

javascript - 通过循环Javascript计算总高度

php - 当我可以使用 POST 或 GET 时,为什么要使用 PUT 和 DELETE

Android 网络 - 最佳实践