springMVC @initBinder 使用
2015-11-10 13:15
465 查看
controller代码:
url : http://localhost:8080/mymvc/welcome?date=2015-11-10
浏览器输出:welcome here again ! current date is 2015-11-10
备注:
initBinder 注解方法首先执行,然后执行requestMapping注解方法,字符串参数自动转成了指定的日期。如果是spring 的版本大于等于4.2 则 @initBinder 方法也可以写作
有一个问题是initBinder 只对当前controller起左右,其它controller无效,如何让initBinder 对所有controller有效呢?我还没有研究出来哈。
-------------------- 华丽的分割线 -------------------------------------------------------
关于@initBinder 对所有 controller 都有效有了解决方案。
利用 @ControllerAdvice注解 。在有此注解的类里 写 @initBinder 方法,并指明目标 类,则可对目标类起作用。
有三种 方式制定目标类:
我选的第二种,目标锁定到指定的包下所有的类。
代码如下
@ControllerAdvice("com.lls.mvc")
public class BasePackageAdvice {
@InitBinder
public void iniiBinder(WebDataBinder binder){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(format, false));
}
注意 在配置文件中将该类扫描
<context:component-scan
base-package="com.lls.config"
/>
这样 就可以将其它的controller的关于日期的initBinder注解方法去掉了。
每次请求都会先调用 @ControllerAdvice 类下的 @initBinder 方法。然后再调用 controller的 @requestMapping 对应的方法。
@Controller public class WelcomeController { @InitBinder public void iniiBinder(WebDataBinder binder){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); format.setLenient(false); binder.registerCustomEditor(Date.class, new CustomDateEditor(format, false)); } @RequestMapping("/welcome") public void welcome(HttpServletResponse response ,Date date) throws IOException{ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); response.getWriter().write("welcome here again ! current date is "+format.format(date)); } }
url : http://localhost:8080/mymvc/welcome?date=2015-11-10
浏览器输出:welcome here again ! current date is 2015-11-10
备注:
initBinder 注解方法首先执行,然后执行requestMapping注解方法,字符串参数自动转成了指定的日期。如果是spring 的版本大于等于4.2 则 @initBinder 方法也可以写作
@InitBinder public void initBinder(WebDataBinder binder) { binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd")); }
有一个问题是initBinder 只对当前controller起左右,其它controller无效,如何让initBinder 对所有controller有效呢?我还没有研究出来哈。
-------------------- 华丽的分割线 -------------------------------------------------------
关于@initBinder 对所有 controller 都有效有了解决方案。
利用 @ControllerAdvice注解 。在有此注解的类里 写 @initBinder 方法,并指明目标 类,则可对目标类起作用。
有三种 方式制定目标类:
// Target all Controllers annotated with @RestController @ControllerAdvice(annotations = RestController.class) public class AnnotationAdvice {} // Target all Controllers within specific packages @ControllerAdvice("org.example.controllers") public class BasePackageAdvice {} // Target all Controllers assignable to specific classes @ControllerAdvice(assignableTypes = {ControllerInterface.class, AbstractController.class}) public class AssignableTypesAdvice {}
我选的第二种,目标锁定到指定的包下所有的类。
代码如下
@ControllerAdvice("com.lls.mvc")
public class BasePackageAdvice {
@InitBinder
public void iniiBinder(WebDataBinder binder){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(format, false));
}
注意 在配置文件中将该类扫描
<context:component-scan
base-package="com.lls.config"
/>
这样 就可以将其它的controller的关于日期的initBinder注解方法去掉了。
每次请求都会先调用 @ControllerAdvice 类下的 @initBinder 方法。然后再调用 controller的 @requestMapping 对应的方法。
相关文章推荐
- Spring整合Dwr,Cannot locate BeanDefinitionParser for element [annotation-scan]
- spring3 MVC手工搭建Spring3项目demo
- spring mvc 开发需要的jar包的用途详解
- 基于注解的 Spring MVC 简单入门-网摘
- [MVC] 深入浅出Spring MVC
- Spring MVC 为例,从前台—>后台—>前台的编解码过程及出现乱码的案例
- (struts2) spring mvc + mybatis + maven整合
- Spring+Spring MVC 整合JasperReports
- 使用springmvc框架之第1篇:spring中bean的系统自动注册
- SpringMVC Json
- ajax跨域:JQuery + Spring MVC3.0
- spring mvc详解1
- Spring MVC和Struts2的区别
- Grails,移动互联网时代服务器端开发的利器
- Spring MVC on JBoss 7.1 final
- Spring MVC 框架搭建及详解
- Spring MVC 教程,快速入门,深入分析
- SSM整合配置文件(Springmvc+Spring+Mybatis)
- SpringMVC 集成JSR303数据校验
- Spring MVC 与 itextpdf 集成实现PDF签名的maven包依赖冲突