1、第一種方式是spring2時代的産物,也就是每個json視圖controller配置一個Jsoniew。
如:<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
或者<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
同樣要用jackson的jar包。
2、第二種使用JSON工具将對象序列化成json,常用工具Jackson,fastjson,gson。
3、第三種利用spring mvc3的注解@ResponseBody,然後使用spring mvc的預設配置就可以傳回json了。
即return Object 會自動轉換成JSON對象。
1.ModelAndView
對于ModelAndView構造函數可以指定傳回頁面的名稱,也可以通過setViewName方法來設定所需要跳轉的頁面;
2.Model
一個模型對象,主要包含spring封裝好的model和modelMap,以及java.util.Map,當沒有視圖傳回的時候視圖名稱将由requestToViewNameTranslator決定;
3.ModelMap
待續
4.Map
響應的view應該也是該請求的view。等同于void傳回。
5.View
這個時候如果在渲染頁面的過程中模型的話,就會給處理器方法定義一個模型參數,然後在方法體裡面往模型中添加值。
6.String
對于String的傳回類型,筆者是配合Model來使用的。
或者通過配合@ResponseBody來将内容或者對象作為HTTP響應正文傳回(适合做即時校驗);
傳回字元串表示一個視圖名稱,這個時候如果需要在渲染視圖的過程中需要模型的話,就可以給處理器添加一個模型參數,然後在方法體往模型添加值就可以了。如果傳回的是對象則會産生一個預設的視圖,然後将傳回的對象直接解析成JSON,預設視圖+JSON生成正文傳回。
7.Void
當傳回類型為Void的時候,則響應的視圖頁面為對應着的通路位址
傳回的結果頁面還是:/type
這個時候我們一般是将傳回結果寫在了HttpServletResponse 中了,如果沒寫的話,spring就會利用RequestToViewNameTranslator 來傳回一個對應的視圖名稱。如果這個時候需要模型的話,處理方法和傳回字元串的情況是相同的。
通過對API的研究可以通過@JsonProperty以及@JsonAutoDetect來實作。
This pseudo-type indicates that all of real types are included
Creators are constructors and (static) factory methods used to construct POJO instances for deserialization
Field refers to fields of regular Java objects.
Getters are methods used to get a POJO field value for serialization, or, under certain conditions also for de-serialization.
This pseudo-type indicates that none of real types is included
Setters are methods used to set a POJO value for deserialization.
我做的是将form的資料轉成json資料,然後發送到背景,背景是SpringMVC。
SpringMVC
注意:這兩個Converter很是重要,他們可以幫助我們将Json資料轉換成java對象。
Controler
js
開始的時候總是出現 400 (Bad Request)這個錯誤, 出現這個錯誤的原因一般最常見的就是背景的實體類bean與前台穿過的類型不比對。然後我列印了一下上述方式生成的json,發現資料格式竟然是這樣子的:
[{"name":"phoneNumber","value":""},{"name":"eMail","value":""},{"name":"appId","value":""},{"name":"title","value":""},{"name":"content","value":""},{"name":"isMailtTemplate","value":"false"}]
相信如果不仔細看的話,還以為是對的。仔細一看,怎麼表單的name屬性和value屬性怎麼出現在這個Json對象裡了。這怎麼能成功的和背景互動呢?
于是改了一下,js如下:
最終列印的資料:
{"phoneNumber":"","eMail":"","appId":"","title":"","content":"fsdfsd","isMailtTemplate":"false"}
這才是正解啊。
<a href="http://blog.csdn.net/yongjiandan/article/details/8308793" target="_blank">http://blog.csdn.net/yongjiandan/article/details/8308793</a>

背景自定義Bean (注意:不要寫成内部類,要寫成單獨的一個類。内部類可能報錯,Json轉對象失敗:"No suitable constructor found for type [simple type, class com.test.faster.domain.respons ,即使定義了構造方法。)