javascript
controller接收json数据_SpringMVC实现多种数据类型绑定
點擊上方“放學等我”,選擇“置頂公眾號”
精品文章,第一時間送達
綁定基本數據類型
Java基本數據類型int的默認值是0,在使用int進行url傳遞參數時,參數key是必須寫的,其值也只能是int類型的,否則將會報錯。 比如方法:
@RequestMapping(value = "baseType.do")
@ResponseBody //返回的數據放到ResponseBody的數據區中
public String baseType(int age){
return "age:"+age;
}
請求的url地址:http://localhost:8080/baseType.do?age=10,其中參數age是必傳的,其值只能是int類型的; 如果不傳,將會報500錯誤。比如:http://localhost:8080/baseType.do 如果傳遞了,但是數據類型是其他類型,將會報400錯誤,比如:http://localhost:8080/baseType.do?age=abc
又比如方法:
@RequestMapping(value="baseType1.do")
@ResponseBody
public String baseType1(@RequestParam(value="xage")int age){
return "age: " + age;
}
我們可以使用@RequestParam注解來為傳入的參數,定義一個別名參數, @RequestParam(value="",required = true)value參數別名 required 該參數是否必傳,默認為true; 訪問的url地址如下: http://localhost:8080/baseType1.do?xage=10 同樣xage這個參數也是必傳的,其類型為int。
如果是其他基本數據類型也是如此,其中 byte,short,int的默認值都為0,long的默認值為0L,float的默認值為0.0f,double的默認值為0.0d 在進行數據綁定時,其參數值必傳,其值的類型為其對應的基本數據類型。
綁定封裝數據類型
Java封裝類型Integer的默認值為null,在使用Integer進行url數據傳遞時,參數key可以不傳,對應參數的值就會默認為null。 比如方法:
@RequestMapping(value = "baseType2.do")
@ResponseBody
public String baseType2(Integer age){
return "age:"+age;
}
其url地址參數age可以不傳,也可以傳,對應的url地址如下: http://localhost:8080/baseType2.do?age=10 http://localhost:8080/baseType2.do 但是如果傳遞了age參數,其值為其他數據類型,將會報400錯誤,比如:http://localhost:8080/baseType2.do?age=abc
數據綁定的數值型接受參數可以是基本類型和包裝類型,但二者有區別: 1、基本類型不可接受空值,會報錯。且輸入數值必須在指定數據類型的數據范圍內 2、包裝類型則可以接受空值,具有優勢,推薦使用,比如傳遞的參數是年齡、身高、長度、寬度等,具體情況可根據業務需要進行變更。
綁定數組類型
Java數組:它是一個具有相同數據類型,固定大小的對象。 綁定數組類型的方法如下:
@RequestMapping(value = "array.do")
@ResponseBody
public String array(String[] name){
StringBuilder sbf = new StringBuilder();
StringBuffer sb = new StringBuffer();
for(String item : name){
sbf.append(item).append(" ");
}
return sbf.toString();
}
在使用url地址傳遞參數時,一次可以傳遞多個參數值,值與值之間使用&分開,如下: http://localhost:8080/array.do?name=Tom&name=Lucy&name=Jim
綁定對象類型
這里以綁定User對象為例,綁定的方法如下:
@RequestMapping(value="/user")
@ResponseBody
public String GetUser(User user){
return user.toString();
}
使用url傳遞參數的方式如下: http://localhost:8080/user?name=Tom&age=10 其中name、age都是User對象的屬性。
對象類型的數據綁定,直接請求時對應其屬性即可,不必添加前綴,如User類的屬性name,則直接在請求中使用name=xxx,而不是使用user.name=xxx的形式。url如下: http://localhost:8080/user?name=Tom&age=10 但如果是想對對象中對象的屬性再賦值的話,則需要使用xxx.xxx的形式,如下的contactInfo.phone表示將User類中的ContactInfo類的phone屬性賦值。 如下: http://localhost:8080/object.do?name=Tom&age=10&contactInfo.phone=10086
兩個對象同屬性進行數據綁定 這里以User對象和Admin對象為例,這兩個對象具有相同的屬性name,age,這兩個對象進行數據綁定的方法如下:
@RequestMapping(value = "object.do")
@ResponseBody
public String object(User user,Admin admin){
return user.toString()+" "+admin.toString();
}
在這里是有Spring注解@InitBinder來初始化一個對象。 對于兩個不同的類,遇到同名屬性的情況,SpringMVC會默認針對所有類的同名屬性賦值,如下面url傳遞的name,age參數將是兩個對象共有的: http://localhost:8080/object.do?name=Tom&age=10
如果想要區別對待,直接使用xxx.xxx的形式是不行的,還需要在對應的Controller中定義方法, 以 @InitBinder 注解標記屬性名,形參使用 WebDataBinder 來定義請求參數前綴,若沒加前綴則是共有的。方法定義如下:
@InitBinder("user") //@InitBinder 初始化一個對象
public void initUser(WebDataBinder binder){
binder.setFieldDefaultPrefix("user.");
}
@InitBinder("admin")
public void initAdmin(WebDataBinder binder){
binder.setFieldDefaultPrefix("admin.");
}
使用url傳遞參數,如下: http://localhost:8080/object.do?user.name=Tom&admin.name=Lucy&age=10 其中age參數是兩個對象共用的。
綁定List對象
Java中List集合類型:List是一個有序,可重復的的線性表。 在綁定List對象數據時,首先要將對象封裝為List對象,并設置它的get/set方法,以User對象為例,封裝如下: private List users; 然后controller下對應的方法定義如下:
@RequestMapping(value = "list.do")
@ResponseBody
public String list(UserListForm userListForm){
return "listSize:"+userListForm.getUsers().size() + " " + userListForm.toString();
}
其中UserListForm是封裝的List對象類,使用url傳遞參數的方式如下: http://localhost:8080/list.do?users[0].name=Tom&users[1].name=Lucy
Controller中List參數不能直接傳值,需要一個包裹類,類中有需要傳的List作為屬性和對應的get,set方法。 傳值時用users[0].name = Tom users[1].name = Luce 一定不要跳躍傳值,如users[0].name = Tom&users[20].name = Lucy 這樣中間的1~19也會占用資源屬性值為空。 http://localhost:8080/list.do?users[0].name=Tom&users[1].name=Lucy&users[20].name=Jim
綁定Map對象
Java中Map集合對象:Map是一個基于kay-value鍵值對的集合類型,它是無序的,其中鍵key不可重復,值value可以重復。 在綁定Map對象數據時,首先要將對象封裝為Map對象,并設置它的get/set方法,以User對象為例,封裝如下:
private Mapusers;
然后controller下對應的方法定義如下:
java@RequestMapping(value="map.do")
@ResponseBody
publicStringmap(UserMapFormuserMapForm){
returnuserMapForm.toString();
}
其中UserMapForm是封裝的Map對象,使用url傳遞參數的方式如下: http://localhost:8080/map.do?users[‘X’].name=Tom&users[‘X’].age=10&users[‘Y’].name=Lucy 其中X,Y是key,類型是String類型。
綁定Set對象 Java中Set集合對象:Set集合無序,且不可重復,因為它重寫了hashCode()方法和equals()方法; Set集合在實際的應用中,常用于對象的重復判斷或者排除重復。 在SpringMVC中綁定Set數據類型,接口的參數形式和綁定list是類似的,都是通過索引。但是不同的在于,Set必須初始化,它必須先包含了初始化對象,也即是說必須提前手動分配好空間,才能進行賦值,而使用List則沒有這個要求。
另外的一個坑在于,初始化Set時需要留意對象的equals方法,假如我們在提前分配兩個對象空間時,兩個對象通過equals方法判斷為相同,則我們期望的Set的size為2,最后實際因為去重變成了1,導致在數據綁定時很容易出現數組越界的異常。
Set集合類型:我們一般用來排重 使用Set的時候需要先進行初始化 要使用Set的排重功能必須在對象中覆寫hashcode和equals方法。 SpringMVC對Set支持并不太好,初始化進行排重時會導致size變小,致使無法接受更多的數據而拋出異常,所以我們開發一般優先使用List。
在綁定Set對象數據時,首先要將對象封裝為Set對象,并設置它的get/set方法,并提供構造方法,封裝如下:
private Set<User> users;
private UserSetForm(){
users = new LinkedHashSet<User>();
users.add(new User()); //定義兩個對象
users.add(new User());
}
其次還要重寫User對象的hashCode()方法和equals()方法 然后controller下對應的方法定義如下:
@RequestMapping(value = "set.do")
@ResponseBody
public String set(UserSetForm userSetForm){
return userSetForm.toString();
}
其中UserSetForm是封裝的Set對象,使用url傳遞參數的方式如下: http://localhost:8080/set.do?users[0].name=Tom&users[1].name=Lucy 且不可跳范圍傳值,如下: http://localhost:8080/set.do?users[0].name=Tom&users[20].name=Lucy 將會報錯。
綁定XML對象
Java綁定XML對象:XML是一種擴展標記語言,常用來存儲或傳輸數據。 對于xml類型的數據綁定,需要在方法形參上增加注解 @RequestBody,并且在Post請求時請求頭為Content-Type: application/xml。 這樣SpringMVC就會調用對應的解析器去解析,所以我們同時還需要在pom中添加xml解析的相關依賴 spring-oxm ,如下:
org.springframework
spring-oxm
4.0.0.RELEASE
將xml對應的實體類進行注解標注,根節點放在類名,并使用name屬性設定對應的xml中的根節點名稱,其他節點同理。 對于Admin對象的name,age屬性定義為xml,格式如下:
Jim 16 xml 數據綁定:必須在實體類里面加注解@XmlRootElement,在屬性上添加XmlElement。定義如下:
@XmlRootElement(name="admin")
public class Admin {
private String name;
private Integer age;
@XmlElement(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement(name="age")
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Admin{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
ex:@XmlElement(name=“age”):此時就會將xml 里面對應的age數據添加到實體類中的age屬性中去。 然后controller下對應的方法定義如下:
@RequestMapping(value = "xml.do")
@ResponseBody
public String xml(@RequestBody Admin admin){
return admin.toString();
}
url請求地址為: http://localhost:8080/xml.do, 請求頭為Content-Type: application/xml.
綁定Json對象
Java綁定Json對象:JSON 是輕量級的文本數據交換格式,常用于存儲和交換文本信息。 SpringMVC接受http中body的json格式內容為參數,在方法的形參前加上注解 @RequestBody,用以調用解析器進行轉換,值得注意的是: 1、在參數中加注解@RequestBody( @RequestBody User user)。@RequestBody是把傳過來的Json數據反序列化綁定到控制器參數上。 controller中方法定義如下:
@RequestMapping(value = "json.do")
@ResponseBody
public String json(@RequestBody User user){
return user.toString();
}
2、pom.xml文件中引入依賴jar包,如下:
org.codehaus.jackson
jackson-mapper-asl
1.9.9
3、http請求頭:Content-Type: application/json。 url請求地址為: http://localhost:8080/json.do
作者:霜花似雪 鏈接:https://www.imooc.com/article/267808 來源:慕課網 本文原創發布于慕課網 ,轉載請注明出處,謝謝合作???end???
本公眾號免費提供csdn下載服務,海量IT學習資源,如果你準備入IT坑,勵志成為優秀的程序猿,那么這些資源很適合你,包括但不限于java、go、python、springcloud、elk、嵌入式 、大數據、面試資料、前端 等資源。同時我們組建了一個技術交流群,里面有很多大佬,會不定時分享技術文章,如果你想來一起學習提高,可以公眾號后臺回復【2】,免費邀請加技術交流群互相學習提高,會不定期分享編程IT相關資源。
掃碼關注,精彩內容第一時間推給你
總結
以上是生活随笔為你收集整理的controller接收json数据_SpringMVC实现多种数据类型绑定的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为java 优招面试题_2017华为优
- 下一篇: Spring Cloud —— 链路追踪