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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

《SpringMVC数据绑定入门》笔记

發布時間:2025/6/17 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《SpringMVC数据绑定入门》笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基本類型

最好使用封裝類型

簡單多數據&多層級對象

簡單多數據

單個對象,直接使用屬性名=值即可

多層級對象

屬性.屬性=值即可

同屬性多對象

WebDataBinder只在當前類中生效,不是全局的

//TODO http://localhost:8080/object.do?user.name=Tom&admin.name=Lucy&age=10@RequestMapping(value = "object.do")@ResponseBodypublic String object(User user,Admin admin){return user.toString()+" "+admin.toString();}@InitBinder("user")public void initUser(WebDataBinder binder){binder.setFieldDefaultPrefix("user.");}@InitBinder("admin")public void initAdmin(WebDataBinder binder){binder.setFieldDefaultPrefix("admin.");}

List、Set、Map類型的數據綁定

list

下標,最好是連續的,不然中間都是null

//TODO http://localhost:8080/list.do?users[0].name=Tom&users[1].name=Lucy&users[20].name=Jim @RequestMapping(value = "list.do") @ResponseBody public String list(UserListForm userListForm){return "listSize:"+userListForm.getUsers().size() + " " + userListForm.toString(); }public class UserListForm {private List<User> users;public List<User> getUsers() {return users;}public void setUsers(List<User> users) {this.users = users;}@Overridepublic String toString() {return "UserListForm{" + "users=" + users + '}';} }

Set

主要是用來去除重復,初始化時,需要設置大小。

//TODO http://localhost:8080/set.do?users[0].name=Tom&users[20].name=Lucy @RequestMapping(value = "set.do") @ResponseBody public String set(UserSetForm userSetForm){return userSetForm.toString(); }public class UserSetForm {private Set<User> users;private UserSetForm(){users = new LinkedHashSet<User>();users.add(new User());users.add(new User());}public Set<User> getUsers() {return users;}public void setUsers(Set<User> users) {this.users = users;}@Overridepublic String toString() {return "UserSetForm{" + "users=" + users + '}';} }

Map

//TODO http://localhost:8080/map.do?users['X'].name=Tom&users['X'].age=10&users['Y'].name=Lucy @RequestMapping(value = "map.do") @ResponseBody public String map(UserMapForm userMapForm){return userMapForm.toString(); }public class UserMapForm {private Map<String,User> users;@Overridepublic String toString() {return "UserMapForm{" + "users=" + users + '}';}public Map<String, User> getUsers() {return users;}public void setUsers(Map<String, User> users) {this.users = users;} }

Json、Xml數據類型的綁定

JSON

User類有name與age屬性,并包含一個contactInfo

// { // "name": "Jim", // "age": 16, // "contactInfo": { // "address": "beijing", // "phone": "10010" // } // }//content-Type:application/json@RequestMapping(value = "json.do")@ResponseBodypublic String json(@RequestBody User user){return user.toString();}

XML

// <?xml version="1.0" encoding="UTF-8" ?> // <admin> // <name>Jim</name> // <age>16</age> // </admin>//content-Type:application/xml@RequestMapping(value = "xml.do")@ResponseBodypublic String xml(@RequestBody Admin admin){return admin.toString();}@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;}@Overridepublic String toString() {return "Admin{" + "name='" + name + '\'' + ", age=" + age + '}';} }

格式化工具和類型轉換器

應用:前臺傳入一字符串,后臺接收一個java.util.Date類型

PropertyEditor的應用

內置的可擴展性;局部使用webdatabinder
binder.registerCustomEditor

// http://localhost:8080/date1.do?date1=2016-07-18@RequestMapping(value = "date1.do")@ResponseBodypublic String date1(Date date1){return date1.toString();}@InitBinder("date1")public void initDate1(WebDataBinder binder){binder.registerCustomEditor(Date.class,new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));}

PropertyEditorSupport有很多子類,可以根據使用場景來選擇

Formatter的應用

內置的可擴展性;全局/局部;Source=String

  • 添加自定義的formatter
public class MyDateFormatter implements Formatter<Date> {public Date parse(String text, Locale locale) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return sdf.parse(text);}public String print(Date object, Locale locale) {return null;} }
  • 配置,全局生效
<!-- 如果不加conversion-service是不會生效的 --> <mvc:annotation-driven conversion-service="myDateFormatter"/><bean id ="myDateFormatter" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="formatters"><set><bean class="com.imooc.common.MyDateFormatter"></bean></set></property> </bean>
  • 使用,由于當前MyDateFormatter是全局生效,所有直接使用Date即可,不需要WebDataBinder了
@RequestMapping(value = "date2.do")@ResponseBodypublic String date2(Date date2){return date2.toString();}

Converter的應用

內置的不可擴展性;全局/局部;Source=自定義的
與Formatter類似,Converter高級一些,可設置Source

  • 實現converter
public class MyDateConverter implements Converter<String,Date> {public Date convert(String source) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");try {return sdf.parse(source);} catch (ParseException e) {e.printStackTrace();}return null;} }
  • 配置,全局生效
<!-- 如果不加conversion-service是不會生效的 --> <mvc:annotation-driven conversion-service="myDateConverter"/><bean id ="myDateConverter" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="converters"><set><bean class="com.imooc.common.MyDateConverter"></bean></set></property> </bean>
  • 使用,由于當前MyDateConverter是全局生效,所有直接使用Date即可,不需要WebDataBinder了
@RequestMapping(value = "date2.do")@ResponseBodypublic String date2(Date date2){return date2.toString();}

RESTful

Resource Representational State Transfer
資源表現層狀態轉換
表現層:如果圖片可以表現為jpg、png等
表現形式:content-Type

冪等性:每次HTTP請求相同的參數,相同的URI,產生的結果是相同的

  • GET:獲取資源
    示例:http://www.book.com/book/001
  • POST:創建資源-不具有冪等性
    面向的不是資源本身,而是資源的接收者
    示例:http://www.book.com/book/
  • PUT:創建(更新)資源
    示例:http://www.book.com/book/001
  • DELETE:刪除資源
    示例:http://www.book.com/book/001
@RequestMapping(value = "/book",method = RequestMethod.GET) @ResponseBody public String book(HttpServletRequest request){String contentType = request.getContentType();if(contentType == null){return "book.default";}else if(contentType.equals("txt")){return "book.txt";}else if(contentType.equals("html")){return "book.html";}return "book.default"; }@RequestMapping(value = "/subject/{subjectId}",method = RequestMethod.GET) @ResponseBody public String subjectGet(@PathVariable("subjectId") String subjectId){return "this is a get method,subjectId:"+subjectId; }@RequestMapping(value = "/subject/{subjectId}",method = RequestMethod.POST) @ResponseBody public String subjectPost(@PathVariable("subjectId") String subjectId){return "this is a post method,subjectId:"+subjectId; }@RequestMapping(value = "/subject/{subjectId}",method = RequestMethod.DELETE) @ResponseBody public String subjectDelete(@PathVariable("subjectId") String subjectId){return "this is a delete method,subjectId:"+subjectId; }@RequestMapping(value = "/subject/{subjectId}",method = RequestMethod.PUT) @ResponseBody public String subjectPut(@PathVariable("subjectId") String subjectId){return "this is a put method,subjectId:"+subjectId; }
  • RESTful設計
moive/douban.com/show/subject/11620560 # 不正確,不應有動詞show moive/douban.com/subject/11620560 # 正確POST /accounts/1/transfer/500/to/2 # 不正確,不應有動詞trfansfer POST /transaction # 正確 from=1&to=2&amount=500.00www.example.com/app/1.0 # 不正確 www.example.com/app # 正確 HEADER version=1.0

轉載于:https://www.cnblogs.com/chencye/p/5686189.html

總結

以上是生活随笔為你收集整理的《SpringMVC数据绑定入门》笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。