-
RESTful设计
查看全部 -
RESTful状态转化
查看全部 -
URI:统一资源定位符
查看全部 -
Restful名称
查看全部 -
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层,将请求体中的内容进行转换
对于一个controller中多个方法需要做前台传过来的日期字符串做日期格式转换操作,可以写一个formatter继承Formatter,然后写一次字符串转日期的操作,最后在dispatcherServlet中配置一下即可。controller中的所有方法参数就可以直接写成日期格式类型,formatter可以帮忙做字符串转日期格式的操作。
查看全部 -
在请求的Url中设置日期类型的字符串传递的时候,报400错,说明日期绑定失败,如何使得Url中的日期与controller方法中入参类型为Date的对象绑定呢?这时,我们就需要注册自定义属性编辑器。如图,@InitBinder("date1")限定参数为date1,通过Url请求时,先执行有此注解的方法,该方法,向数据绑定器注册了新的自定义的属性编辑器,将Date类型的value设置为SimpleDateFormat("yyyy-MM-DD"),假如Url传递的参数为date1=2020-02-20,那么就会将Date参数直接格式化为yyyy-MM-DD格式,并作为controller方法的参数。完成绑定,可见,通过注解实现自定义参数绑定只需要注意两点:①使用注解,绑定传递的参数,形如@InitBinder("date1"),绑定的参数为date1,②基于此注解的方法,必须有一个参数,且参数类型为WebDataBinder,通过调用该对象的registerCustomEdior(_,_)实现自定义属性转换的注册。
查看全部 -
使用PropertyEditor实现绑定时的类型转换:(数据类型转换器) 请求参数string到参数类型(也可能是任意类型)的类型转换,都是使用PropertyEditor类实现的string到任意参数的转换的。但是PropertyEditor不能实现任意对象到任意对象之间的转换,比如我们常见的Long时间戳到Date类型的转换时办不到的。
1、PropertyEditor:在类中进行局部使用
2、Formatter:全局,或者使用new Formatter的方式进行局部使用,只能转换String到其他类型;
3、Converter:全局或局部,和Formatter类似,但Converter的源对象不仅仅是String,而可以自行进行定义
查看全部 -
同样对于xml类型的数据绑定,和json类似,在方法形参上增加注解 @RequestBody,并且在Post请求时请求头为Content-Type: application/xml。这样SpringMVC就会调用对应的解析器去解析,所以我们同时还需要在pom中添加xml解析的相关依赖 spring-oxm ,同时如截图所示,将xml对应的实体类进行注解标注,根节点放在类名,并使用name属性设定对应的xml中的根节点名称,其他节点同理。
xml 数据绑定:必须在实体类里面加注解@XmlRootElement,在属性上添加XmlElement ex:@XmlElement(name="age"):此时就会将xml 里面对应的age数据添加到实体类中的age属性中去。 2、xml数据绑定需要“spring-oxm”这个jar包提供支持
查看全部 -
SpringMVC接受http中body的json格式内容为参数,在方法的形参前加上注解 @RequestBody,用以调用解析器进行转换,值得注意的是:
1.在参数中加注解@RequestBody( @RequestBody User user)。@RequestBody是把传过来的Json数据反序列化绑定到控制器参数上
2.chrome DHC插件,构建post包等
3.json依赖的包:
<groupId>org.codehuas.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
4.需要在dispatcher-servelt.xml中<mvc:annotation-driven />,相当于默认配置了部分HandlerMapping和HandlerAdapter,如此处需要的RequestMappingHandlerAdapter
查看全部 -
在SpringMVC中绑定Set数据类型,接口的参数形式和绑定list是类似的,都是通过索引。但是不同的在于,Set必须初始化,如图必须先包含了初始化对象,也即是说必须提前手动分配好空间,才能进行赋值,而使用List则没有这个要求。
另外的一个坑在于,初始化Set时需要留意对象的equals方法,假如我们在提前分配两个对象空间时,两个对象通过equals方法判断为相同,则我们期望的Set的size为2,最后实际因为去重变成了1,导致在数据绑定时很容易出现数组越界的异常。
Set我们一般用来排重 使用Set的时候需要先进行初始化 要使用Set的排重功能必须在对象中覆写hashcode和equals方法。 SpringMVC对Set支持并不太好,初始化进行排重时会导致size变小,致使无法接受更多的数据而抛出异常,所以我们开发一般优先使用List。
查看全部 -
Controll中List参数不能直接传值,需要一个包裹类,类中有需要传的List作为属性和对应的get,set方法。 传值时用users[0].name = Tom users[1].name = Luce 一定不要跳跃传值,如users[0].name = Tom&users[20].name = Lucy 这样中间的1~19也会占用资源属性值为空。
查看全部 -
@InitBinder 注解用于初始化一个对象
对于两个不同的类,遇到同名属性的情况,SpringMVC会默认针对所有类的同名属性赋值,如截图中的age。如果想要区别对待,直接使用xxx.xxx的形式是不行的,还需要在对应的Controller中定义方法,以 @InitBinder 注解标记属性名,形参使用 WebDataBinder 来定义请求参数前缀,如截图。
在url中传递参数的出现同属性时,可以通过InitBinder方法进行初始化,再属性前加前缀来区别,若没加前缀则是共有的
@InitBinder("user")
public void intUser(WebDataBinder binder){ binder.setFieldDefaultPrefix("user.");
}
查看全部 -
对象类型的数据绑定,直接请求时对应其属性即可,不必添加前缀,如截图中User类的属性name,则直接在请求中使用name=xxx,而不是使用user.name=xxx的形式。但如果是想对对象中对象的属性再赋值的话,则需要使用xxx.xxx的形式,如下的contactInfo.phone表示将User类中的ContactInfo类的phone属性赋值。
查看全部 -
@controller 注解使类生效
@RequestMapping(value="",meithod = RequestMethod.GET) 指定请求和方法
@RequestParam(value="",required = true)value参数别名 required 是否必传默认为true
@RequestParam("xage")int age,xage是别名,别名是xage,客户端传上来的也要是xage,名称要一致
查看全部
举报