日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

controller接收json数据_SpringMVC实现多种数据类型绑定

發(fā)布時間:2025/3/12 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 controller接收json数据_SpringMVC实现多种数据类型绑定 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

點(diǎn)擊上方“放學(xué)等我”,選擇“置頂公眾號”

精品文章,第一時間送達(dá)

綁定基本數(shù)據(jù)類型

Java基本數(shù)據(jù)類型int的默認(rèn)值是0,在使用int進(jìn)行url傳遞參數(shù)時,參數(shù)key是必須寫的,其值也只能是int類型的,否則將會報錯。 比如方法:

@RequestMapping(value = "baseType.do")

@ResponseBody //返回的數(shù)據(jù)放到ResponseBody的數(shù)據(jù)區(qū)中

public String baseType(int age){

return "age:"+age;

}

請求的url地址:http://localhost:8080/baseType.do?age=10,其中參數(shù)age是必傳的,其值只能是int類型的; 如果不傳,將會報500錯誤。比如:http://localhost:8080/baseType.do 如果傳遞了,但是數(shù)據(jù)類型是其他類型,將會報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注解來為傳入的參數(shù),定義一個別名參數(shù), @RequestParam(value="",required = true)value參數(shù)別名 required 該參數(shù)是否必傳,默認(rèn)為true; 訪問的url地址如下: http://localhost:8080/baseType1.do?xage=10 同樣xage這個參數(shù)也是必傳的,其類型為int。

如果是其他基本數(shù)據(jù)類型也是如此,其中 byte,short,int的默認(rèn)值都為0,long的默認(rèn)值為0L,float的默認(rèn)值為0.0f,double的默認(rèn)值為0.0d 在進(jìn)行數(shù)據(jù)綁定時,其參數(shù)值必傳,其值的類型為其對應(yīng)的基本數(shù)據(jù)類型。

綁定封裝數(shù)據(jù)類型

Java封裝類型Integer的默認(rèn)值為null,在使用Integer進(jìn)行url數(shù)據(jù)傳遞時,參數(shù)key可以不傳,對應(yīng)參數(shù)的值就會默認(rèn)為null。 比如方法:

@RequestMapping(value = "baseType2.do")

@ResponseBody

public String baseType2(Integer age){

return "age:"+age;

}

其url地址參數(shù)age可以不傳,也可以傳,對應(yīng)的url地址如下: http://localhost:8080/baseType2.do?age=10 http://localhost:8080/baseType2.do 但是如果傳遞了age參數(shù),其值為其他數(shù)據(jù)類型,將會報400錯誤,比如:http://localhost:8080/baseType2.do?age=abc

數(shù)據(jù)綁定的數(shù)值型接受參數(shù)可以是基本類型和包裝類型,但二者有區(qū)別: 1、基本類型不可接受空值,會報錯。且輸入數(shù)值必須在指定數(shù)據(jù)類型的數(shù)據(jù)范圍內(nèi) 2、包裝類型則可以接受空值,具有優(yōu)勢,推薦使用,比如傳遞的參數(shù)是年齡、身高、長度、寬度等,具體情況可根據(jù)業(yè)務(wù)需要進(jìn)行變更。

綁定數(shù)組類型

Java數(shù)組:它是一個具有相同數(shù)據(jù)類型,固定大小的對象。 綁定數(shù)組類型的方法如下:

@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地址傳遞參數(shù)時,一次可以傳遞多個參數(shù)值,值與值之間使用&分開,如下: 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傳遞參數(shù)的方式如下: http://localhost:8080/user?name=Tom&age=10 其中name、age都是User對象的屬性。

對象類型的數(shù)據(jù)綁定,直接請求時對應(yīng)其屬性即可,不必添加前綴,如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

兩個對象同屬性進(jìn)行數(shù)據(jù)綁定 這里以User對象和Admin對象為例,這兩個對象具有相同的屬性name,age,這兩個對象進(jìn)行數(shù)據(jù)綁定的方法如下:

@RequestMapping(value = "object.do")

@ResponseBody

public String object(User user,Admin admin){

return user.toString()+" "+admin.toString();

}

在這里是有Spring注解@InitBinder來初始化一個對象。 對于兩個不同的類,遇到同名屬性的情況,SpringMVC會默認(rèn)針對所有類的同名屬性賦值,如下面url傳遞的name,age參數(shù)將是兩個對象共有的: http://localhost:8080/object.do?name=Tom&age=10

如果想要區(qū)別對待,直接使用xxx.xxx的形式是不行的,還需要在對應(yīng)的Controller中定義方法, 以 @InitBinder 注解標(biāo)記屬性名,形參使用 WebDataBinder 來定義請求參數(shù)前綴,若沒加前綴則是共有的。方法定義如下:

@InitBinder("user") //@InitBinder 初始化一個對象

public void initUser(WebDataBinder binder){

binder.setFieldDefaultPrefix("user.");

}

@InitBinder("admin")

public void initAdmin(WebDataBinder binder){

binder.setFieldDefaultPrefix("admin.");

}

使用url傳遞參數(shù),如下: http://localhost:8080/object.do?user.name=Tom&admin.name=Lucy&age=10 其中age參數(shù)是兩個對象共用的。

綁定List對象

Java中List集合類型:List是一個有序,可重復(fù)的的線性表。 在綁定List對象數(shù)據(jù)時,首先要將對象封裝為List對象,并設(shè)置它的get/set方法,以User對象為例,封裝如下: private List users; 然后controller下對應(yīng)的方法定義如下:

@RequestMapping(value = "list.do")

@ResponseBody

public String list(UserListForm userListForm){

return "listSize:"+userListForm.getUsers().size() + " " + userListForm.toString();

}

其中UserListForm是封裝的List對象類,使用url傳遞參數(shù)的方式如下: http://localhost:8080/list.do?users[0].name=Tom&users[1].name=Lucy

Controller中List參數(shù)不能直接傳值,需要一個包裹類,類中有需要傳的List作為屬性和對應(yīng)的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不可重復(fù),值value可以重復(fù)。 在綁定Map對象數(shù)據(jù)時,首先要將對象封裝為Map對象,并設(shè)置它的get/set方法,以User對象為例,封裝如下:

private Mapusers;
然后controller下對應(yīng)的方法定義如下:

java@RequestMapping(value="map.do")
@ResponseBody
publicStringmap(UserMapFormuserMapForm){
returnuserMapForm.toString();
}
其中UserMapForm是封裝的Map對象,使用url傳遞參數(shù)的方式如下: 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集合無序,且不可重復(fù),因?yàn)樗貙懥薶ashCode()方法和equals()方法; Set集合在實(shí)際的應(yīng)用中,常用于對象的重復(fù)判斷或者排除重復(fù)。 在SpringMVC中綁定Set數(shù)據(jù)類型,接口的參數(shù)形式和綁定list是類似的,都是通過索引。但是不同的在于,Set必須初始化,它必須先包含了初始化對象,也即是說必須提前手動分配好空間,才能進(jìn)行賦值,而使用List則沒有這個要求。

另外的一個坑在于,初始化Set時需要留意對象的equals方法,假如我們在提前分配兩個對象空間時,兩個對象通過equals方法判斷為相同,則我們期望的Set的size為2,最后實(shí)際因?yàn)槿ブ刈兂闪?,導(dǎo)致在數(shù)據(jù)綁定時很容易出現(xiàn)數(shù)組越界的異常。

Set集合類型:我們一般用來排重 使用Set的時候需要先進(jìn)行初始化 要使用Set的排重功能必須在對象中覆寫hashcode和equals方法。 SpringMVC對Set支持并不太好,初始化進(jìn)行排重時會導(dǎo)致size變小,致使無法接受更多的數(shù)據(jù)而拋出異常,所以我們開發(fā)一般優(yōu)先使用List。

在綁定Set對象數(shù)據(jù)時,首先要將對象封裝為Set對象,并設(shè)置它的get/set方法,并提供構(gòu)造方法,封裝如下:

private Set<User> users;

private UserSetForm(){

users = new LinkedHashSet<User>();

users.add(new User()); //定義兩個對象

users.add(new User());

}

其次還要重寫User對象的hashCode()方法和equals()方法 然后controller下對應(yīng)的方法定義如下:

@RequestMapping(value = "set.do")

@ResponseBody

public String set(UserSetForm userSetForm){

return userSetForm.toString();

}

其中UserSetForm是封裝的Set對象,使用url傳遞參數(shù)的方式如下: 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是一種擴(kuò)展標(biāo)記語言,常用來存儲或傳輸數(shù)據(jù)。 對于xml類型的數(shù)據(jù)綁定,需要在方法形參上增加注解 @RequestBody,并且在Post請求時請求頭為Content-Type: application/xml。 這樣SpringMVC就會調(diào)用對應(yīng)的解析器去解析,所以我們同時還需要在pom中添加xml解析的相關(guān)依賴 spring-oxm ,如下:

org.springframework

spring-oxm

4.0.0.RELEASE

將xml對應(yīng)的實(shí)體類進(jìn)行注解標(biāo)注,根節(jié)點(diǎn)放在類名,并使用name屬性設(shè)定對應(yīng)的xml中的根節(jié)點(diǎn)名稱,其他節(jié)點(diǎn)同理。 對于Admin對象的name,age屬性定義為xml,格式如下:

Jim 16 xml 數(shù)據(jù)綁定:必須在實(shí)體類里面加注解@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 里面對應(yīng)的age數(shù)據(jù)添加到實(shí)體類中的age屬性中去。 然后controller下對應(yīng)的方法定義如下:

@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 是輕量級的文本數(shù)據(jù)交換格式,常用于存儲和交換文本信息。 SpringMVC接受http中body的json格式內(nèi)容為參數(shù),在方法的形參前加上注解 @RequestBody,用以調(diào)用解析器進(jìn)行轉(zhuǎn)換,值得注意的是: 1、在參數(shù)中加注解@RequestBody( @RequestBody User user)。@RequestBody是把傳過來的Json數(shù)據(jù)反序列化綁定到控制器參數(shù)上。 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 來源:慕課網(wǎng) 本文原創(chuàng)發(fā)布于慕課網(wǎng) ,轉(zhuǎn)載請注明出處,謝謝合作

???end???


本公眾號免費(fèi)提供csdn下載服務(wù),海量IT學(xué)習(xí)資源,如果你準(zhǔn)備入IT坑,勵志成為優(yōu)秀的程序猿,那么這些資源很適合你,包括但不限于java、go、python、springcloud、elk、嵌入式 、大數(shù)據(jù)、面試資料、前端 等資源。同時我們組建了一個技術(shù)交流群,里面有很多大佬,會不定時分享技術(shù)文章,如果你想來一起學(xué)習(xí)提高,可以公眾號后臺回復(fù)【2】,免費(fèi)邀請加技術(shù)交流群互相學(xué)習(xí)提高,會不定期分享編程IT相關(guān)資源。


掃碼關(guān)注,精彩內(nèi)容第一時間推給你

總結(jié)

以上是生活随笔為你收集整理的controller接收json数据_SpringMVC实现多种数据类型绑定的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。