-
1、PropertyEditor:在类中进行局部使用
2、Formatter:全局,或者使用new Formatter的方式进行局部使用,只能转换String到其他类型;
3、Converter:全局或局部,和Formatter类似,但Converter的源对象不仅仅是String,而可以自行进行定义
查看全部 -
1、同Formatter类似,Converter自定义时实现Converter接口,指定泛型<S, T>,即源对象和目标对象,然后实现convert方法;
2、同样在xml中进行配置,将自定义转换器注入FormattingConversionServiceFactoryBean,再将该bean作为mvc的conversion-service
3、不同在于,Formatter只能将String作为源对象,而Converter则可以自行定义
查看全部 -
1、自定义Formatter需要实现Formatter接口,并指定泛型(转换后的类型,该视频例中即为Date),实现其parse方法
2、配置bean,将自定义Formatter注入到Spring的FormattingConversionServiceFactoryBean类中,采用xml配置方式,同时将该bean作为mvc的conversion-service(如截图)
3、注意,这种规范器是全局的,Formatter适用于转换String为其他类型,所以一般用在web层,将请求体中的内容进行转换
查看全部 -
之前几个章节我们提到了在处理同级对象的同名属性时,使用注解 @InitBinder 来设置不同的前缀以作区别,这里我们同样用到了这个注解,这次来大概梳理一下。
先看下 @InitBinder 注解的大概说明:用来标记某些方法,初始化WebDataBinder来处理参数。那么我们可以继续看下 WebDataBinder,说明是“为了处理数据绑定,用来将请求中的参数转化为JavaBean对象”,所以我们也就用到了该对象的一个方法registerCustomEditor,而该方法的一个重要的参数类型就是 PropertyEditor,这个接口说明的作用是“提供各种方式展示属性值”
这里涉及到的两个接口 PropertyEditor 和 PropertyEditorRegistry,显然后者是前者的注册器。在注册器的实现类 PropertyEditorRegistrySupport 中我们可以看到其属性就有 defaultEditors 和 customEditors,从命名就可以看出,如果我们使用自定义规则,就需要将自定义的PropertyEditor,通过 registerCustomEditor() 将其注册到 customEditors 中才能使用。那么有两种方式,第一种是我们自定义类继承PropertyEditorSupport间接实现PropertyEditor接口,这在上个章节视频《7-1 介绍》的1:17前后进行了说明;第二种方式就是实际上spring提供了一些简单的实现类,比如日期的编辑器类CustomDateEditor,也就是我们如截图所示意用到的。
查看全部 -
小结:
1、每个uri代表一种资源
2、客户端和服务器之间,传递这种资源的某种表现层
3、客户端通过http动词,对服务器端资源进行操作,实现“表现层状态转化”
查看全部 -
GET:获取资源
POST:创建新资源
PUT:创建或更新资源
DELETE:删除资源
查看全部 -
uri代表资源,所以要避免动词,如截图中的show就不应该出现
查看全部 -
把uri当成一种资源,而资源作为信息实体,可以有多种外在表现形式,如一个文本可以对外表现为html、json、二进制等,如何通过uri获取这个资源的表现,则是依靠htpp协议的content-type和accept
查看全部 -
同样对于xml类型的数据绑定,和json类似,在方法形参上增加注解 @RequestBody,并且在Post请求时请求头为Content-Type: application/xml。这样SpringMVC就会调用对应的解析器去解析,所以我们同时还需要在pom中添加xml解析的相关依赖 spring-oxm ,同时如截图所示,将xml对应的实体类进行注解标注,根节点放在类名,并使用name属性设定对应的xml中的根节点名称,其他节点同理。
查看全部 -
SpringMVC接受http中body的json格式内容为参数,在方法的形参前加上注解 @RequestBody,用以调用解析器进行转换,值得注意的是:
1、需要额外添加jackson的依赖
2、需要在dispatcher-servelt.xml中<mvc:annotation-driven />,相当于默认配置了部分HandlerMapping和HandlerAdapter,如此处需要的RequestMappingHandlerAdapter(参考:https://blog.csdn.net/qq_18675693/article/details/52214056)
3、post请求时,请求头信息务必添加 Content-Type: application/json
查看全部 -
map的方式和list类似,不同的在于索引不是数字,而是key
查看全部 -
在SpringMVC中绑定Set数据类型,接口的参数形式和绑定list是类似的,都是通过索引。但是不同的在于,Set必须初始化,如图必须先包含了初始化对象,也即是说必须提前手动分配好空间,才能进行赋值,而使用List则没有这个要求。
另外的一个坑在于,初始化Set时需要留意对象的equals方法,假如我们在提前分配两个对象空间时,两个对象通过equals方法判断为相同,则我们期望的Set的size为2,最后实际因为去重变成了1,导致在数据绑定时很容易出现数组越界的异常。
查看全部 -
List类型的传参,使用某个类进行封装,以xxx.xxList[x]类似方式进行数据绑定,注意索引按顺序分别填写参数,否则容易创建空值的对象到List中。
查看全部 -
对于两个不同的类,遇到同名属性的情况,SpringMVC会默认针对所有类的同名属性赋值,如截图中的age。如果想要区别对待,直接使用xxx.xxx的形式是不行的,还需要在对应的Controller中定义方法,以 @InitBinder 注解标记属性名,形参使用 WebDataBinder 来定义请求参数前缀,如截图。
查看全部 -
对象类型的数据绑定,直接请求时对应其属性即可,不必添加前缀,如截图中User类的属性name,则直接在请求中使用name=xxx,而不是使用user.name=xxx的形式。但如果是想对对象中对象的属性再赋值的话,则需要使用xxx.xxx的形式,如下的contactInfo.phone表示将User类中的ContactInfo类的phone属性赋值。
查看全部
举报