白白白

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
@ResponseBody
    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public void test(HttpServletRequest req,HttpServletResponse resp) {
        resp.setStatus(401);
try { resp.getWriter().write("失败"); resp.getWriter().flush(); } catch (IOException e) { e.printStackTrace(); } }

在controller中这种,指定status为401直接通过reponse返回,ajax error中是可以收到的。

fiddler抓包为 

HTTP/1.1 401
Access-Control-Allow-Origin: null
Vary: Origin
Access-Control-Allow-Credentials: true
Date: Thu, 18 May 2017 05:07:36 GMT
Content-Length: 2

??

中文问题需要设置 

  resp.setCharacterEncoding("utf-8");
Content-Type: application/json;charset=UTF-8

 

需要在response返回前设置

response.setHeader("Access-Control-Allow-Origin", "*"); 即可正常使用

统一异常拦截实例:http://blog.csdn.net/u013111003/article/details/51953221

抛出创建异常实体时,将response传过去,并在构造方法中设置该句response.setHeader("Access-Control-Allow-Origin", "*")

该句不能在filter刚进入时就设置,会导致response立刻返回。

public class HttpStatusTokenException extends Exception {
  private static final long serialVersionUID = 1L;
  private String messageInfo;

  public HttpStatusTokenException(String messageInfo,HttpServletResponse resp) {
    super(messageInfo);
    this.messageInfo = messageInfo;
    resp.setHeader("Access-Control-Allow-Origin", "*");
  }
  public String getMessageInfo() {
    return messageInfo;
  }

  public void setMessageInfo(String messageInfo) {
    this.messageInfo = messageInfo;
  }
}

 

 

或者选择在 interceptor中设置


@Component("userRoleInterceptor")
@Configuration
public class UserRoleInterceptor extends HandlerInterceptorAdapter {  @Override

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
          throws Exception {
      if (!(handler instanceof HandlerMethod)) {
        return true;
      }
     response.setHeader("Access-Control-Allow-Origin", "*");
   }
}

 

前端js调用方法

$.ajax({
      type: 'POST',
      url: 'http://localhost:9999/lottery/api/v1/luckuser/login',
      contentType:'application/json',
      data:JSON.stringify({
                    "userName": '1',
                    "password": "null"
            }),
      success: function(res) {
        console.log(res)
      },
      error:function(res) {
        console.log( JSON.parse(res.responseText).message)
      }
    });

 

posted on 2017-05-18 14:45  道至简  阅读(269)  评论(0)    收藏  举报