SpringMVC: 拦截器Interceptor preHandle()返回false,为何HTTP返回码是200?

HTTP返回码是200让前端觉得是成功的啊,这种状况前端如何检测?譬如前端是ajax调用,dataType=“json”时,怎么办?判断data是否为null?

        $.ajax({
            url: "${ctx}/dict/add",
            type: "post",
            dataType: "json",
            //contentType: "application/json",
            async: false,
            data: {
                csrfToken: function () {
                    return $("#csrfToken").val();
                },
                bookStore: bookStore
            },
            success: function(data){
                if(data == null){ // 这里判断data==null?
                

BTW:contentType为"application/json",是不是data只能是一个json对象,而不能出现如上所示的状况?

阅读 19.5k
2 个回答

如果你想返回其他状态码只需要在return前设一下就好.

    ......
    response.setStatus(405) //可以用response.getWriter()返回json或你想要的格式,同时设置header: Content-Type:text/json
    return false;

谢邀

正常请求,正常响应,200是正常的

你想要怎么判断?
我举个栗子吧:

我的一个拦截器(判断用户是否登录):

 @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // session是否存在用户信息
        UserInfo userInfo = (UserInfo) request.getSession().getAttribute("LOGIN_USER");
        if (userInfo == null) {
            // 异步请求返回 
            AsynchronousResult result = new AsynchronousResult();
            result.setMessage("test");
            response.setContentType("application/json; charset=UTF-8");
            response.getWriter().print(SerializeUtil.serialize(result));
            return false;
        }
        return true;
    }

AsynchronousResult 对象是什么呢?

public class AsynchronousResult implements Serializable{

    private static final long serialVersionUID = -1072103465426536854L;

    /**
     * 结果
     */
    private String result = "fail";

    /**
     * 消息
     */
    private String message;


    /**
     * 获取 结果
     */
    public String getResult() {
        return this.result;
    }

    /**
     * 设置 结果
     */
    public void setResult(String result) {
        this.result = result;
    }

    /**
     * 获取 消息
     */
    public String getMessage() {
        return this.message;
    }

    /**
     * 设置 消息
     */
    public void setMessage(String message) {
        this.message = message;
    }
}

相信你应该明白了,我异步请求,如果没登录,返回了一个AsynchronousResult 对象,且这个对象的result 属性是fail. 那么前端怎么处理呢?:

ajax({
    url: "/test,
    type: "POST",
    data: requestDate,
    success: function (res) {
        if (res.result === 'success') {
           // do sothing 
           
        } else {
           // 返回的res.result是fail,这里处理。
           
        }
    }
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题