- 
            
            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,就会调用下面的方法。 对于customEditors:下面图片中的上面的registerCustomEditor方法是下面registerCustomEditor方法的重载,中间差了一个参数,该参数就是String propertyPath参数,如果上面的方法传入了一个null,就会调用下面的方法。 对于Date数据类型绑定: 对于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这个实现类。 总结:内置的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通过如下进行支持  查看全部 查看全部
举报
 
             
         
                 
                 
                