Ajax使用PrintWriter回傳字串(Java)

專案遇到的怪問題,紀錄一下解決方法

(後來發現其實是很基礎的Spring Controller回傳字串的方法)

狀況是這樣的

我使用Spring MVC架構

在前端建立一個按鈕

按下去會使用Ajax到後端去查DB狀態

然後傳對應字串回前端

雖然後端功能執行沒問題

但最後return result時卻跑進Ajax的error區

查了一下後發現

連回傳字串都要特殊處理

而回傳json更還要導入jar檔(jackson之類的)

設定過後才能解析json格式

(真的是令人......,反觀C#真的好方便......)

因為不想導入jackson去設定一堆有的沒的(之後再學XD)

所以就查到了PrintWriter這個用法

程式碼如下:

JSP:

function checkStatus(){
    var seqNo = $("#seqNo").text(); //清單編號
        
    var url = "custTagDataAdd.do?action=checkStatus";
        
    var data = {"seqNo" : seqNo};
        
    $.ajax({
        url: url,
        type: "POST",
        data: data,
        error: function (jqXHR, textStatus, errorThrown) {
            alert("查詢功能發生問題,暫時先關閉功能,請稍後再試");
            $("#checkStatus").attr("disabled","disabled");
        },
        success: function (result) {
            alert(result);
        }
    });
}

 

Controller:

public void checkStatus(HttpServletRequest req, HttpServletResponse res) {
                
    String seqNo = req.getParameter("seqNo");
        
    service = this.getService();
        
    String checkStatus = service.checkStatus(seqNo);
                
    String result = "";
        
    if(checkStatus.equals("S")) {
        result = "正在上傳資料中";
    }else if(checkStatus.equals("C")) {
        result = "資料已上傳完成";
    }else if(checkStatus.equals("E")) {
        result = "系統發生錯誤,請重新上傳";
    }else {
        result = "系統發生錯誤,請稍後再試";
    }
        
    res.setCharacterEncoding("UTF-8"); 
    PrintWriter pw;
    try {
        pw = res.getWriter();
        pw.print(result); 
        pw.flush(); 
        pw.close(); 
    } catch (IOException e) {
        log.info(e.toString());
    }     
        
}

 

簡單來說,在HttpServletResponse中取得裡面的writer

就可以在裡面寫入要傳回去的東西

除了print之外可以使用println換行

response.getWriter會在前端直接輸出數據

輸出後不會刷新頁面,用來配合Ajax蠻剛好的

以後可能會常用這個方法吧

 

補充一下

基本上寫入PrintWriter時

會使用write這個方法

但這個方法只能輸入char或string類的字符字串

所以改用print這個方法

print可以將輸入的東西轉換成bytes再用write輸出