Day63

Day63

 

 

数据转化

数据绑定期间的数据类型转换? String ---Integer String ---Boolean 。xxxx

数据绑定期间的数据格式转化问题? 比如提交的日期转换

 

 

数据校验:

前端校验:JS+正则表达式

后端校验:重要的数据也是必须后端校验。

 

 

ConversionService组件进行数据类型转化、数据格式化

Vaildator组件进行数据合法性检验,并最终生成数据绑定结果BindingData对象

BindingResult对产生的结果进行保存。

 

实现功能1:自定义类型转换

步骤:

1、ConversionService:接口

它里面有Convertor(转换器)进行工作。

1)、实现Converter接口,写一个自定义的类型转换器。

2)、写好的Converter放进ConversionService中。

将WebDataBinder中的ConversionService设置成外面加了自定义类型转换器的ConverService

3)、配置出ConversionService

<!--告诉SpringMVC别用默认的ConversionService,用我们自定义的-->
<bean id ="conversion" class="org.springframework.context.support.ConversionServiceFactoryBean">
   <!--converts转换器中添加我们的自定义的类型转换器-->
   <property name="converters" >
       <set>
           <bean class="com.sorrymaker.component.MyStringToEmployeeConverter"/>
       </set>
   </property>
</bean>

4)、让SpringMVC用我们的ConversionService

<!--conversionService,使用我们自己配置的类型转换组件,别用Springmvc里面的 -->
<mvc:annotation-driven conversion-service="conversion"></mvc:annotation-driven>

 

总结:

1、实现Converter接口,做一个自定义类型转换器。

2、将这个Converter配置在ConversionService中。

3、告诉SpringMVC使用我们的ConversionService。

 

 

mvc:anntation-driven

解析这个大小要添加很多东西。(开挂了)

 

只要请求不好使就召唤mvc:annotation-driven

<mvc:default-servlet-handler/>,和 <mvc:annotation-driven/>。

1)都没配置。动态资源(@RequestMapping映射的资源能访问,静态资源(html,js,img)不能访问

动态资源:DefaultAnnotationHandleMapping中的HandleMapping中保存了每一个资源的映射信息

静态资源:handlerMap中没有保存静态资源映射的请求

handlerAdapter:方法执行适配器

AnnotationMethodHandlerAdapter:帮我们执行目标方法;(过时了,现在好像不用了)

 

2)加上<mvc:default-servlet-handler/>,不加 <mvc:annotation-driven/>。静态资源ok,动态资源拉闸

这里没有保存defaultAnnotationHandleMapping,把所有请求通过SimpleUrlHandleMapping给tomcat处理。

静态能访问的原因:SimpleUrlHandleMapping把所有请求映射给tomcat处理。

没有了AnnotationMethodHandlerAdapter,执行不了目标方法了。

 

3)加上<mvc:default-servlet-handler/>, <mvc:annotation-driven/>两个都加。静态动态资源都可以访问

RequestMappingHandleMapping 有这个和SimpleUrlHandleMapping。所以静态动态资源都可以访问了。

原来的AnnotationMethodHandlerAdapter被换成RequestMappingHandleAdapter。

用解析器来解析,不用一个个匹配。组件化思想。

 

4)只加<mvc:annotation-driven/>,静态资源不能

 

 

数据格式化

@NumberFormat()数字格式化。

页面提交的数据格式如果不正确,就是400

就@DateTimeFormat(pattern = "yyyy-MM-dd")就可以了。

ConversionServiceFactoryBean:创建的自定义的类型转换器里面没有时间格式化。所以要改这个👇👇👇👇👇👇。

<bean id ="conversion" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">

这样子就可以直接加个@DateTimeFormat(pattern ="yyyy-MM-dd")就ok了。

 

 

数据检验:

只做前端校验是不安全的

在重要数据一定要加上后端验证

1、可以写程序将我们每一个数据取出进行校验,如果失败直接来到添加页面,提示其重新填写。

2、SpringMVC:可以JSR303来做数据检验

JDBC:规范----实现(各个厂商的驱动包)

JSR303:规范 ------ Hibernate Validator(第三方校验框架)

3、如何快速的进行后端校验:

1)、导入校验框架的jar包(核心包和依赖包)(带EL的jar包,tomcat有,导入后,会爆炸。)

2)、只需要给JavaBean的属性加注解。

3)、在SpringMVC封装对象的时候,告诉SpringMVC这个JavaBean需要校验。

加个@Valid,就可以了。

    public String addEmp(@Valid Employee employee){

4)、如何知道校验结果

给需要校验的javaBean后面紧跟一个BindingResult。这个BindingResult就是封装前一个Bean的校验结果

5)、根据不同的校验结果决定怎么样。

 

国际化定制自己的错误消息显示。

 

当出现bug-->>>ResourceBundle [errors] not found for MessageSource: Can't find bundle for base name errors, locale zh_CN

就把ResourceBundleMessageSource---->>>>>ReloadResourceBundleMessageSource

1.编写国际化的文件

errors_zh_CN.properties

errors_en_US.properties

 

2.让SpringMVC管理国际化资源文件。

<!--管理国际化资源文件 -->
<bean id = "messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
   <property name="basename" value="errors"></property>
</bean>

3.来到页面取值。

 

 

小知识

修饰方法的权限图

 

posted @ 2021-06-14 13:20  独眼龙  阅读(54)  评论(0)    收藏  举报