MVC是三层架构的基础,使用了核心控制器统一处理请求,参数,转发,响应结果
可以减少servlet的数量
可以减少servlet的负担
SpringMVC在spring的基础上提出了基于MVC的web结构
SpringMVC输入参数
基本类型
对象类型
web对象类型
HttpServletRequst
HttpServletResponse
HttpSession
支持数组类型
自定义转换类型
日期类型可以直接使用注解实现
SpringMVC的返回结果的处理
主要是通过ModelAndView对返回结果统一处理
ModelAndView的返回方式有两种
转发,受到视图解析器的影响
重定向
对数据的处理
主要是通过mv.addobject(key,value)将数据保存
默认情况下是保存在request的setAttribute中
也可以通过注解@SessionAttributes放入到session中
SpringMVC对JSON的处理
可以使用默认自带的jackson进行处理
也可以使用Fastjson进行处理
方式一:在头部加上ResponseBody
方式二:直接使用RestController
对请求的json格式的处理
请求的参数如果是json,那么则使用了@RequstBody修饰参数对象
@RequestMapping("/t2")
public String t2(@RequestBody UserEntity userEntity){
System.out.println(userEntity.toString());
return "获取结果";
}
json的日期格式处理
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
SpringMVC的json的常用的注解操作
日期格式的操作
在jackson的直接使用@jsonFormat进行交换
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
属性名修改操作
在jackson可以通过注解@jsonPropertry设置json输出参数的值
@JsonProperty("password")
String pwd;
忽略相关属性
在jackson中可以通过注解@jsonlgnore设置忽略属性
@JsonIgnore
String pwd;
null和empty属性排除
属性如果未null的时候,那么不转换成json格式
如果属性是空字符串,例如"",或者是List长度为0,那么不转换json格式
自定义序列
创建一个序列化执行的类
public class MySerializer extends JsonSerializer<Double> {
@Override
public void serialize(Double value, //原始值
JsonGenerator jsonGenerator,//json输出对象
SerializerProvider serializerProvider) throws IOException {
//进行四舍五入
String number = BigDecimal.valueOf(value).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
//输出结果
jsonGenerator.writeNumber(number);
}
}
在类的属性上,通过注解使用
@JsonSerialize(using = MySerializer.class)
Double money = 100.126; //输出的时候,想要100.13
SpringMVC的Fastjson的使用
导入fastJSON的依赖包
<!-- FastJson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
需要在springmvc.xml中配置
<mvc:annotation-driven>
<!-- 安装FastJson,转换器 -->
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<!-- 声明转换类型:json -->
<property name="supportedMediaTypes">
<list>
<value>application/json</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
常用的注解
日期格式化:@JSONField(fromat="yyyy/MM/dd")
属性名修改:@JSONField(name="birth")
忽略属性:@JSONField(seriailze=false)
-
包含null值@JSONField(serialzeFeatures = SerializerFeature.WriteMapNullValue) 默认会忽略所有null值,有此注解会输出null
-
@JSONField(serialzeFeatures = SerializerFeature.WriteNullStringAsEmpty) null的String输出为""
-
-
自定义序列化:@JSONField(serializeUsing = MySerializer2.class)
拦截器和过滤器的区别
实现机制不同
过滤器是tomcat自带的组件,和tomcat容器相关
拦截器是spring通过AOP机制实现的,和tomcat容器无关
执行顺序不同
过滤器先执行,拦截器后执行
拦截器会被springMVC,可以通过@Autowired获取容器中的bean