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字串。
總結:這種方式,其實是沒有多大的實際意思,因為一般接收資料不是這麼接收的。只做瞭解!
相關推薦
springmvc之json資料互動controller方法返回值為簡單型別
當controller方法的返回值為簡單型別比如String時,該如何與json互動呢? 使用@RequestBody 比如程式碼如下: @RequestMapping(value="/ceshijson",produces="application/
springmvc之json資料互動
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
SpringMVC的json資料互動
SpringMVC的json資料互
SpringMVC的Controller方法返回值
一、返回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();//