1. 程式人生 > >springmvc之json資料互動controller方法返回值為簡單型別

springmvc之json資料互動controller方法返回值為簡單型別

當controller方法的返回值為簡單型別比如String時,該如何與json互動呢?
使用@RequestBody
比如程式碼如下:

@RequestMapping(value="/ceshijson",produces="application/json;charset=UTF-8")
@ResponseBody
public String ceshijson(@RequestBody String channelId) throws IOException{

    return channelId;

如果程式碼為上面這種情況時,前臺傳送json時,應該這樣寫(寫法有很多,能用就行)

function channel(){
          //先獲取選中的值
          var channelId = $("#channelId option:selected").val();
          //來判斷髮送的連結
          if(channelId ==2){


            $.ajax({
                  url:"ceshijson",
                  type:"post",
                  dataType:'json',
                  contentType:'application/json;charset=utf-8'
, data:JSON.stringify({'channelId':channelId}), success:function(data){ alert(data.channelId); }, error:function(XMLHttpRequest, textStatus, errorThrown){ alert("Error") alert(XMLHttpRequest.status); alert(XMLHttpRequest.readyState); alert(textStatus); } }); } }

這裡需要特別注意:上篇也強調過,使用了@RequestBody時,它要求String channelId接收到資料為json字串。也就是要是data寫成這樣: data:{‘channelId’:channelId},就是錯誤的。因為這是json物件形式。

要是你不想使用JSON.stringify()這個函式,那就自己手動字串拼接:

data:'{"channelId":'+channelId+'}'

這裡還要注意channelId是雙引號,不能寫成單引號,因為這是json語法規則。你改成單引號,也就是

**錯誤寫法
data:"{'channelId':"+channelId+"}"

這種形式,雖然可以傳給後臺,但是後臺傳回來的會出現undefined。也就是key必須要用雙引號包圍。

不使用@RequestBody

    @RequestMapping(value="/ceshijson",produces="application/json;charset=UTF-8")
    @ResponseBody
    public String ceshijson(String channelId) throws IOException{
        Map<String,Object> map = new HashMap<String,Object>();
         map.put("channelId", channelId);
         ObjectMapper mapper = new ObjectMapper();
         channelId = mapper.writeValueAsString(map);
        return channelId;
    }

前臺程式碼

$.ajax({
         url:"ceshijson",
         type:"post",
         dataType:'json',
         //contentType:'application/json;charset=utf-8',
         data:"channelId="+channelId,
         success:function(data){
                alert(data);
         },
         error:function(XMLHttpRequest, textStatus, errorThrown){  
                    alert("Error")  
                    alert(XMLHttpRequest.status);  
                 alert(XMLHttpRequest.readyState);  
                 alert(textStatus);  
                }
});

這種方式利用ObjectMapper中的writeValueAsString將Java物件轉換為json字串。

總結:這種方式,其實是沒有多大的實際意思,因為一般接收資料不是這麼接收的。只做瞭解!

相關推薦

springmvcjson資料互動controller方法返回簡單型別

當controller方法的返回值為簡單型別比如String時,該如何與json互動呢? 使用@RequestBody 比如程式碼如下: @RequestMapping(value="/ceshijson",produces="application/

springmvcjson資料互動

json資料格式在介面呼叫中,html頁面中較常用,json格式比較簡單,解析還比較方便。  springmvc進行json資料互動   為什麼要用json資料進行解析 最終輸出json資料,為了方便在前端介面對請求結果進行解析。 1、請求json、輸出jso

SpringMVC框架(1)(1.3 註解開發&Controller方法返回

一、 註解開發基礎: 1. @RequestMapping 註解(在Controller類上或方法上,用於指定 url和請求方式): 1. 設定方法對應的URL(一個方法對應一個URL); 2. 設定請求的根路徑;(eg:http:// localhost:8080/project/bo

SpringMvc入門到開發(五)json資料互動,RESTful支援,攔截器【附詳細截圖】

【說明】這是繼上一篇沒有講完的繼續。上一篇講了自定義引數型別,異常處理類,檔案上傳。接下來還有幾點!!有興趣的可以看上一篇 四:請求json,響應json實現 1、加入jar包 。如果需要spr

springmvc Controller方法返回

response ping resp log mod for iter 頁面 轉發 1.1返回ModelAndView 不建議使用 1.2返回String 建議使用 @RequestMapping("updateItem") public String updat

SpringMVCjson資料互動

                                      SpringMVC的json資料互

SpringMVCController方法返回

一、返回ModelAndView controller方法中定義ModelAndView物件並返回,物件中可以新增model資料、指定的view。 public ModelAndView queryItemList() {  // 建立頁面需要顯示的商品資料  List

SpringBoot學習Json資料互動

最近在弄監控主機專案,對javaweb又再努力學習。實際的專案場景中,前後分離幾乎是所以專案的標配,全棧的時代的逐漸遠去,後端負責業務邏輯處理,前端負責資料展示成了一種固定的開發模式。像thymeleaf這種東西沒法實現前後端分離模板難學也只有寫java的才用吧,還是用js模板引擎接

springmvc實現json資料互動_ajax技術

1為什麼要用json?     json資料格式再介面呼叫中,html頁面中比較常用。json格式比較簡單,解析還比較方便。     ① 請求json,輸出json要求請求的json串,所以在前端頁面中

SpringMVC的@RequestMapping和Controller方法返回

【原文:https://www.cnblogs.com/zhaojiankai/p/8184207.html】   本節內容: @RequestMapping Controller方法返回值   一、@RequestMapping 通過@R

######springmvc方法返回String時@responseBody不能返回json物件。

引用 2 樓 tzdwsy 的回覆: RequestMappingR中加上produces=“application/json”試試 這樣寫只是返回前臺後不報錯,但是資料格式依然不是json的,它只是在返回的資料上打了個引號;“channelId=2” 真正的解決方法應該是這樣的

Controller方法返回

文章目錄 1 返回ModelAndView 2 返回void 2.1 設定轉發 2.3 重定向 3 返回String 3.1 返回檢視名 3.2 forword 3.2 redict

SprimgMVC學習筆記(五)—— Controller方法返回

一、返回ModelAndView   controller方法中定義ModelAndView物件並返回,物件中可新增model資料、指定view。 /** * 查詢商品列表 * @return */ @RequestMapping(value={"itemLis

在使用ThinkPHP時候資料更新的時候,save()方法返回0的問題!!!!

 在使用TP框架操作資料庫,使用了save()的方法更新資料,但是發現沒有資料更新,執行save()後,返回的結果是0,使得判斷的結果出錯! 原本我的做法就是這樣:        $res =  使

json資料處理(如果name空歸其它,如果陣列長度大於15,超出15的部分歸其它)

adata = {"resolution":{"540x960":3,"1080x1920":4,"1080x2160":2,"720x1080":1}, "brand":{"":10}, "versio

java 寫一個方法返回是Map型別

寫一個方法返回值是Map型別:(通過控制檯 寫進去一行字元,分別統計出其英文字母,空格,數字和其它字元 放到對應的list裡面,最終把list放到Map裡並返回) 最近老遇到問這個問題的人,我覺定寫個蠢一點的辦法滿足一下大家 import java.util.*

python呼叫C動態庫匯出函式的返回指標型別時,在64位python環境下被截斷解決方法

          class my_void_p(c_void_p):               pass                      def sslog_create_instance():               #直接指定 restype=c_void_p在64位上還是會發生地址截

關於java位元組流的read()方法返回int的思考

我們都知道java中io操作分為位元組流和字元流,對於位元組流,顧名思義是按位元組的方式讀取資料,所以我們常用位元組流來讀取二進位制流(如圖片,音樂 等檔案)。問題是為什麼位元組流中定義的read()方法返回值為int型別呢?既然它一次讀出一個位元組資料為什麼不返回byte型別呢?(不知道有沒有人 和我有同

Eclipse自動生成變數名宣告(按方法返回本地變數賦

 ctrl+2+L這個快捷鍵可自動補全程式碼,極大提升編碼效率! 注:ctrl和2同時按完以後釋放,再快速按L。 比如寫這句程式碼: Graphics g = image.getGraphics(); 只需要先寫方法image.getGraphics()  然後按c

函式返回指標型別的總結

char*GetString(void) { char p[]= "hello world"; return p; //編譯器一般將提出警告資訊 } void main(void) { char *str = NULL; str = GetString();//