是这样的
框架:ssm
有自定义全局异常处理器
在密码错误或手机号错误等情况时,抛出异常,并且在异常处理器里面respone返回了json,大约就是这样的
{
  "errormessage": "手机号码格式不正确"
}但是手机端只能接到500错误,并没有接收到json,该怎么办呢?
可用确定的是抓包,是抓到了json的,而且同时也是500

解决方案 »

  1.   

    如果你的设计是合理的,对于你的接口来说,排除掉网络原因,其他任何情况下获取到的http状态码都应该是200,
    1.定义全局异常处理器,
    2.业务代码中通过异常捕获方式,返回相应错误信息。
      

  2.   

    大神你好.确实是500,也确实有json啊public class ZhouxiaoqiExceptionResolver implements HandlerExceptionResolver{ @Override
    public ModelAndView resolveException(HttpServletRequest request,
    HttpServletResponse response, Object handler, Exception ex) {
    // TODO Auto-generated method stub
    ZhouxiaoqiException exception= null;
    if(ex instanceof ZhouxiaoqiException){
    //如果抛出的是zhouxiaoqiexception
    exception=(ZhouxiaoqiException) ex;
    }else{
    //如果抛出的不是
    exception = new ZhouxiaoqiException("系统错误,请与系统管理 员联系!");
    }
    //如果是手机端
    if(request.getRequestURI().indexOf("/app/")>=0||request.getRequestURI().indexOf("SMS")>=0){

    JsonConfig jsonConfig = new JsonConfig();
    jsonConfig.setExcludes(new String[]{"cause","localizedMessage","stackTrace","message"});
    JSONObject jsonObject = JSONObject.fromObject(exception,jsonConfig);
    String string = jsonObject.toString();
    // 将json数据通过输出流写到客户端
    response.setContentType("text/json;charset=utf-8");
    try {
    response.getWriter().write(string);
    } catch (IOException e) {
    System.out.println(1);
    e.printStackTrace();
    }

    return null;
    }else{
    //如果是后台客户端
    ModelAndView mv = new ModelAndView();

    mv.addObject("message", exception.getErrormessage());
    mv.setViewName("error");
    return mv;

    }
    }
      

  3.   

    以上代码是走的通的,而且我respone设置status(200)也不管用,还是500
      

  4.   

    好像手机端使用了okgo框架,直接根据状态码分发响应了,于是我的响应直接到了"被错误"的方法里面 
      

  5.   

    这种你需要response,response中有responseHeader,将错误信息set到header中,将header set到response去,安卓方面就可以获取到错误的响应码和响应信息,就可以获取出响应码和对象的信息,这样操作就ok了
      

  6.   


    不用设置异常什么的,正常调用,你给response错误码和信息即可.这样也不是json返回.对了,500呢有可能是服务器端出问题了,你最好自己用浏览器模拟请求,看看是不是真的接口没问题