-
RESTful 风格的重点:
构成: 资源 -- 表现层 -- 状态转化
查看全部 -
RESTful 风格的GET、POST、PUT、DELET请求接口,常见以ID来标识某个资源,并通过查找 ID 来达到获取目标资源或删改某个数据的目的
查看全部 -
RESTful 状态转化 :
GET 、POST、PUT、DELETE 的特点查看全部 -
RESTful 表现层的内容<br/>查看全部
-
SpringMVC 数据绑定的扩展性查看全部
-
springMVC查看全部
-
资源,表现层,状态转化
查看全部 -
同属性多对象绑定
@InitBinder(“a”)
public void initA(WebDataBinder binder){
binder.setFieldDefaultPrefix("a.");
}
@InitBinder("b")
public void initB(WebDataBinder binder){
binder.setFieldDefaultPrefix("b.");
}
查看全部 -
本章主要介绍SpringMVC提供的PropertyEditor和自定义Formatter、Converter的使用场景、解决的实际的问题以及Formatter和Converter的简单对比和选型依据
知识点1:
【a】PropertyEditor:属性编辑器,一般用于类型转换,它是一个接口,有很多实现类,常用直接下级实现类是PropertyEditorSupport,该类常用方法有。
setValue(Object value):一般自定义类型转换器调用并传入一个实体类对象。
getValue():一般通过自定义类型转换器对象调用该方法就可以获得实体类对象。
setAsText(String text):通常传入一个字符串,并对该字符串进行解析,然后对实体类属性进行赋值。
实现PropertyEdito接口时,通常不直接实现接口PropertyEditor,而是继承PropertyEditorSupport类进行扩展。
案例:创建一个名为MyPropertyEditor的自定义类型转换器,并继承PropertyEditorSupport,这样就可以使用接口PropertyEditor提供的方法,实现setAsText(String text)方法,该方法里创建User对象,并对传进来的字符串用逗号分隔成字符串数组,把字符串数组第0个元素赋值给User对象的name,字符串数组的第1个元素赋值给User对象的age,再通过setValue(Object obj),把User对象传入,这样做的目的,就可以和前端约定,第一个字符在逗号前面的传名字,第二个字符在逗号后面的传年龄,这样通过自定义的Editor就可以使用User对象进行接收。
扩展:getValue()方法源码实现——它会返回一个Object对象,源码中返回的是一个value属性,而这个value就是PropertyEditorSupport的Object类型的属性
【b】Formatter:格式化器,它是一个接口Formatter<T>,它继承Printer<T>和Parser<T>,他有很多实现类(AbstractNumberFormatter、CurrencyFormatter货币转换器、DateFormatter日期的转换、InstanceFormatter、NumberFormatter、PercentFormatter百分比转换器等),这里拿CurrencyFormatter讲解(货币转换器)(DateFormatter是做日期的格式化转换器,PercentFormatter是做百分比的格式化转换器)。
案例:创建自定义格式化类型转化器FormatterTest
test1()方法中,创建CurrencyFormatter对象,该对象调用setFractionDigits(2),该方法是用来保留小数点后几位的,该对象再调用setRoundingMode(RoundingMode.CEILING),该方法是用作舍入操作,celling表示四舍五入,接着通过Assert类的assertEquals()断言方法,拿123.13和123.125进行断言。
案例2:将BigDecimal("123")格式化为字符串"$123.00"展示,CurrencyFormatter的parse方法返回值是BigDecimal,print方法返回值是String。
【c】Converter:格式化器,它也是接口,该接口有两个泛型Converter<S,T>(其中<S>是source的类型,<T>是target的类型),它的实现类很多,例如NumberToCharacterConverter,把数字转换为字符,这里使用StringToBooleanConverter进行讲解,它实现了Converter<String,Boolean>接口,而且修饰的类使用的是final修饰符而不是public,原因是防止该类被修改、被继承,Converter接口不让实现类进行扩展,而Formatter不一样,它可以使用CurrentFormatter继承Formatter接口的实现类AbstractNumberFormatter,可以进行扩展。
案例:首先在dispatcher-servlet.xml中把StringToBooleanConverter注入,然后再配置<mvc:annotation-driven conversion-service="stringToBooleanConverter"/>
总结:内置的CustomDateEditor(它继承了PropertyEditorSupport),内置的CurrencyFormatter(它继承了AbstractNumberFormatter),内置的StringToBooleanConverter(它实现了Converter<String,Boolean>),就扩展性来说,这里所说扩展性都是Spring内置扩展性,Converter不可扩展,PropertyEditor一般局部使用配合webdatabinder使用,Formatter全局局部都可以,全局是通过Spring注入的方式,局部就像单元测试那样,new一个Formatter,然后调用它的方法,Converter全局和局部都可以,全局也是通过Spring注入的方式,局部也是自己实现Converter接口,写一个实现,然后new这个实现类。
查看全部 -
SpringMVC——xml的数据绑定
案例:绑定xml数据类型,也是通过RequestBody数据区获取xml数据
步骤1:该功能需要如下依赖,该包完成xml数据的序列化和反序列化功能。
步骤2:实体类中使用到两个注解,分别为@XmlRootElement(name="admin")给类取别名和@XmlElement(name="name")用在属性的get方法上,,如下图
XML数据:
输出:
查看全部 -
本章主要介绍Json、Xml的数据绑定以及坑
知识点1:SpringMVC——Json数据绑定
案例:Controller中方法参数为User类型对象,传输Json时,Json数据被放到RequestBody里,所以需要在User前+@RequestBody注解(它会把RequestBody数据区的内容反序列化为该参数的对象),这里使用DHC插件,该插件可以模拟各种请求,这里请求为POST,还需要把Content-Type,改成application/json如下图
返回值:
JSON通过如下进行支持:也就是将JSON数据绑定到实体中
查看全部 -
SpringMVC的RESTful实现方式
【1】起源:REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的,他同时是apache基金会的第一人主席,HTTP1.0和HTTP1.1版本的设计者之一
【2】名称:Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer(表现层、状态、转化)的缩写,如果一个架构符合REST原则,就称它为RESTful架构(完整全称:Resource Representational State Transfer)。
【3】资源-Resource:例如一个文本、图片、服务、音频、网络上的一个具体信息,可以通过统一资源定位符uri指向它。
【4】表现层-Representational:资源是一种信息实体,可以有多种的外在表现形式,资源的外在表现形式称为Representational,即表现层,例如一个文本,它的表现形式可以有txt、html、xml、json、二进制,图片的表现形式可以有jpg、png,uri代表实体资源的位置,并不代表表现形式,具体的表现形式通过http协议的content-type和accept这两个字段进行描述。
案例:理解RESTful表现层——Representational
book是一个资源,通过http的content-type获取不同的格式
【5】状态转化
【6】设计
查看全部 -
PropertyEditor的应用
案例:Controller中有个方法,并且该方法的参数为Date类型。如下图,此时如果直接通过url传入日期数据,会报400错误,说明参数是有问题的。
CustomDateEditor类:MVC编码中,该Editor经常被注册,通过使用binder.registerCustomEditor(这个binder就是之前admin和user
拥有同样的name和age,方法里有个WebDataBinder类型的binder)
registerCustomEditor():它是WebDataBinder对象的方法,该方法在它的父类DataBinder中继承来的,该方法中通过getPropertyEditorRegistry()获得PropertyEditorRegistry对象,它就代表一个注册,PropertyEditorRegistry是一个接口,该接口有很多实现类,其中一个PropertyEditorRegistrySupport实现类,该类有一个Map类型的defaultEditors和customEditors,defaultEditors是这个类创建的时候,SpringMVC自动生成defaultEditors。customEditors需要人工手动进行注册,所谓注册过程就是把Map进行一个put的操作,这里可以通过createDefaultEditors()了解它defaultEditors是如何搜索的,首先对defaultEditors成员变量进行声明,声明成一个HashMap长度为64,然后会放入很多defaultEditors
对于customEditors:下面图片中的上面的registerCustomEditor方法是下面registerCustomEditor方法的重载,中间差了一个参数,该参数就是String propertyPath参数,如果上面的方法传入了一个null,就会调用下面的方法。
对于Date数据类型绑定:
通过@InitBinder("date1")注解,并且在initDate1方法中WebDataBinder对象调用registerCustomEditor(),把这个东西进行注册,因为默认注册是没有Date类型的,但是PropertyEditorSupport进行了扩展,支持很多子类,并把Date类型,转换成CustomDateEditor类型,通过CustomDateEditor的构造器了解,一个参数是DateFormat一个参数是allowEmpty类型,这里new一个SimpleDateFormat
查看全部 -
本章主要介绍SpringMVC提供的PropertyEditor和自定义Formatter、Converter的使用场景、解决的实际的问题以及Formatter和Converter的简单对比和选型依据
知识点1:自定义类型转换器
【a】PropertyEditor:属性编辑器,一般用于类型转换,它是一个接口,有很多实现类,常用实现类是PropertyEditorSupport,该类常用方法有,setValue(Object value)、getValue(){返回的是Object类型的对象,这里返回的是通过setValue传入的对象}、setAsText(String text),实现自定义PropertyEditor,通常不直接实现接口PropertyEditor,而是继承PropertyEditorSupport进行扩展。
案例:创建一个名为MyPropertyEditor的自定义转换器,并继承PropertyEditorSupport,实现setAsText(String text)方法,该方法里创建User对象,并对传进来的字符串用逗号分隔成字符串数组,把字符串数组第一个元素赋值给User对象的name,字符串数组的第二个元素赋值给User对象的age,再通过setValue(Object obj),把User对象传入,这样做的目的,前端就可以通过逗号前传name逗号后传age传参数了。
【b】Formatter:Formatter<T>格式化器,它是一个接口,继承Printer<T>和Parser<T>,他有很多实现类,这里拿CurrencyFormatter讲解(货币转换器)(DateFormatter是做日期的格式化转换器,PercentFormatter是做百分比的格式化转换器)。
案例:创建自定义格式化类型转化器FormatterTest
test1()方法中,创建CurrencyFormatter对象,该对象调用setFractionDigits(2),该方法是用来保留小数点后几位的,该对象再调用setRoundingMode(RoundingMode.CEILING),该方法是用作舍入操作,celling表示四舍五入,接着通过Assert类的assertEquals()断言方法,拿123.13和123.125进行断言。
案例2:将BigDecimal("123")格式化为字符串"$123.00"展示,CurrencyFormatter的parse方法返回值是BigDecimal,print方法返回值是String。
【c】Converter:格式化器,它也是接口,该接口有两个泛型Converter<S,T>(其中<S>是source的类型,<T>是target的类型),它的实现类很多,例如NumberToCharacterConverter,把数字转换为字符,这里使用StringToBooleanConverter进行讲解,它实现了Converter<String,Boolean>接口,而且修饰的类使用的是final修饰符而不是public,原因是防止该类被修改、被继承,Converter接口不让实现类进行扩展,而Formatter不一样,它可以使用CurrentFormatter继承Formatter接口的实现类AbstractNumberFormatter,可以进行扩展。
案例:首先在dispatcher-servlet.xml中把StringToBooleanConverter注入,然后再配置<mvc:annotation-driven conversion-service="stringToBooleanConverter"/>
总结:内置的CustomDateEditor(它继承了PropertyEditorSupport),内置的CurrencyFormatter(它继承了AbstractNumberFormatter),内置的StringToBooleanConverter(它实现了Converter<String,Boolean>),就扩展性来说,这里所说扩展性都是Spring内置扩展性,Converter不可扩展,PropertyEditor一般局部使用配合webdatabinder使用,Formatter全局局部都可以,全局是通过Spring注入的方式,局部就像单元测试那样,new一个Formatter,然后调用它的方法,Converter全局和局部都可以,全局也是通过Spring注入的方式,局部也是自己实现Converter接口,写一个实现,然后new这个实现类。
查看全部 -
本章主要介绍Json、Xml的数据绑定以及坑
知识点1:SpringMVC——Json数据绑定
案例:Controller中方法参数为User类型对象,传输Json时,Json数据被放到RequestBody里,所以需要在User前+@RequestBody注解(它会把RequestBody数据区的内容反序列化为该参数的对象),这里使用DHC插件,该插件可以模拟各种请求,这里请求为POST,还需要把Content-Type,改成application/json如下图
返回值:
JSON通过如下进行支持
查看全部
举报