鍍金池/ 問答/Java  HTML/ SpringMVC: 攔截器Interceptor preHandle()返回f

SpringMVC: 攔截器Interceptor preHandle()返回false,為何HTTP返回碼是200?

HTTP返回碼是200讓前端覺得是成功的啊,這種狀況前端如何檢測?譬如前端是ajax調(diào)用,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對象,而不能出現(xiàn)如上所示的狀況?

回答
編輯回答
未命名

如果你想返回其他狀態(tài)碼只需要在return前設(shè)一下就好.

    ......
    response.setStatus(405) //可以用response.getWriter()返回json或你想要的格式,同時設(shè)置header: Content-Type:text/json
    return false;
2017年7月21日 09:31
編輯回答
萌吟

謝邀

正常請求,正常響應(yīng),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;

    /**
     * 結(jié)果
     */
    private String result = "fail";

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


    /**
     * 獲取 結(jié)果
     */
    public String getResult() {
        return this.result;
    }

    /**
     * 設(shè)置 結(jié)果
     */
    public void setResult(String result) {
        this.result = result;
    }

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

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

相信你應(yīng)該明白了,我異步請求,如果沒登錄,返回了一個AsynchronousResult 對象,且這個對象的result 屬性是fail. 那么前端怎么處理呢?:

ajax({
    url: "/test,
    type: "POST",
    data: requestDate,
    success: function (res) {
        if (res.result === 'success') {
           // do sothing 
           
        } else {
           // 返回的res.result是fail,這里處理。
           
        }
    }
});
2018年9月7日 00:30