出现异常时返回JSON,如何确定对应的HTTP返回码?

我用@ControllerAdvice,@ExceptionHandler(RuntimeException.class), @ExceptionHandler(Exception.class) 等注解使客户端收到更友好的JSON格式的提示。而不是常见的报错页面,

@ResponseStatus(value= HttpStatus.OK)
@ExceptionHandler(Exception.class)
@ResponseBody
public String handleException(Exception ex) {
    logger.error(ex.getMessage(), ex);
    return jsonRes(600, 6001, ex.getMessage());
}

JSON的格式就是 {status:600, code:6001, message:"xx错误"}

但是我不知道哪些异常对应哪些返回码,尤其是http返回码大全如下,这么多,

http://www.cnblogs.com/lxinxu...

如何根据具体异常返回对应的返回码呢?

阅读 5.3k
1 个回答

200:get/put请求成功
201:post请求成功
204:delete请求成功
400:请求异常,如参数错误等
500:未知异常,系统内部的错误
404:not found异常,如get/put/delete未找到对应资源

1、创建不同类型的自定义异常
2、在SpringMVC中可以编写一个异常解析器,异常统一交给这个解析器来处理,判断抛出来的是哪种类型的异常,然后返回对应的状态码。

public class ServerExceptionResolver implements HandlerExceptionResolver{
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest,
                                         HttpServletResponse httpServletResponse, Object o, Exception e) {
        

        //返回异常信息
        if (e instanceof AuthenticException) {
            //保持认证请求处理不变
            AuthenticException ae = (AuthenticException) e;
            HttpResponseUtils.responseErrorlMessage(httpServletResponse, ae.getCode(), ae.getMessage());

        }  else if(e instanceof UnauthorizedException){
            HttpResponseUtils.responseJson(httpServletResponse,
                    new CommonResponse<>(CommonResponse.STATUS_AUTH_ERROR, ErrorCodeEnum.AUTH_ERROR.getMessage()));

        }else {
            //若异常未设置错误信息,则默认为"未知异常".
            HttpResponseUtils.responseJson(httpServletResponse,
                    new CommonResponse<>(CommonResponse.STATUS_UNKNOWN_ERROR, ErrorCodeEnum.UNKNOWN_ERROR.getMessage()));
        }



        return null;
    }
}

3、在spring mvc的配置中配置全局异常的Bean

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题