Locale处理
对应语言信息,方便 i18n国际化
package com.cskaoyan.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Locale;
@RestController
public class HelloController {
@RequestMapping("hello")
//Locale作为参数传入即可
public String hello(Locale locale){
System.out.println(locale);
return "OK";
}
}
MessageSource
Locale和MessageSource合起来可以做国际化
MessageSource做的事情,是通过key从配置文件中取出值,利用MessageSource组件
注册MessageSource组件
//如果配置文件中有中文,编码要写的和你配置文件的编码一致。
在setting中可以查看编码格式。
或者File—>Other settings—>setting for New projects
//如果没有对应的key,是否选择key作为对应的value
比如配置文件中没有userz.password(key)这个key,就可以使userz.password(key)的value为userz.password。
利用MessageSource和localeResolver来做i18n国际化
MseeageSource接口中的getMessage()方法
参数var2数组类似于Jdbc中的PreparedStatement,按照占位符做赋值。
测试结果:
Hibernate-Validator
用处:参数校验
之前是在service、dao或者controller层做的参数校验。类似这种:
if(username .length > 6)
if(age > 100)
if(password != “niupi”)
Hibernate-Validator将校验逻辑,绑定在javabean上,校验javabean的成员变量,其中Javabean是作为handler方法的形参来使用。.
register(User user)
入门案例
拿到错误的参数去做个性化的处理
需要拿到错误的参数,在handler方法中增加一个参数bindingResult,拿到校验过程的结果
@size、@Min、@Max、@AssertFalse这些注解中都有默认的message信息的。
我们也可以修改默认的message
前端就可以拿到这样的json数据,然后可以在前端页面告诉用户发生错误的信息。
message也可以去做国际化
整合spring和springmvc
如何把这些加载项前置呢?
比如我们只想让controller组件在第一次访问url的时候加载,而controller依赖的组件如:service、dao、dataSource、tx这样的组件可以提前完成加载。
把controller组件之外的组件单独放到一个容器中,controller组件单独放到另一个容器中。
父容器子容器类比父类与子类,子类可以调用父类的方法,父类不可以调用子类的方法。
子容器依赖父容器的组件,父容器不依赖子容器的组件。
如果spring配置文件和springMVC配置文件的扫描包都是com.cskaoyan,controller组件就会发生重复注册的情况。
如何判断一个组件是否完成注册?
利用生命周期进行判断。生命周期最开始会调用实例化,实例化通常都是通过无参构造方法来做的,我们可以重写controller的无参构造方法来看。
package com.cskaoyan.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("hello")
public String hello(){
System.out.println("hello");
return "hello";
}
public HelloController() {
System.out.println("hello controller init");
}
}
访问http://localhost:8080/hello,运行结果:
说明controller组件确实发生了重复注册的情况。
那么就需要把controller组件从spring容器中移除。
使用javaconfig来使用springmvc
spring容器和springMVC容器是分开的
spring容器 → 配置类
springmvc容器 → 配置类
web.xml → 启动类
application.xml → 配置类
application-mvc.xml → 配置类
这些配置文件都可以变成java代码的形式。
前后端分离的话,我们后端主要用到的是json数据,就不去写jsp,也就不创建webapp目录了。
增加了@Configuration注解后,本身的配置类也是一个组件。
这样就会导致一个问题:WebConfiguration就在SpringConfiguration的扫描范围内。
mvc配置类在spring配置类扫描包范围内
把springMVC的配置类从spring配置类的扫描范围内去除掉。
SpringMVC的组件使用javaconfig怎么使用
converter(复杂)
做一个外科 → 心脏搭桥 → 把心脏取出、搭桥、放回去
三步走:
1、拿到conversionService
2、增加上我们定义的converter
3、conversionService放回去
multipartResolver
bean id=”指定id” class/>
6. localeResolver
7. MessageSource
8. validator
9. viewResolver
10. HandlerExceptionResolver