Spring MVC(二)——
一、不同的返回值类型
1、返回值为 void
2、返回值为 字符串
返回值为字符串,主要有三种情况:
方法返回值为字符串:
- 重定向 / 服务端跳转
- 逻辑视图名
- 真的字符串
当返回的字符串有前缀时,代表不同的功能:
1、forward
2、redirect
总的功能看下图:
可以看到这里返回字符串 01 返回的是 名称为 01 的页面,如果就是想要返回字符串 01 呢?可以通过注解 @ResponseBody 来返回:
换句话说加了这个注解,你返回什么它就显示什么。如果每个方法都要加上,就会很麻烦,可以加在类上面:
二、Json处理
1、jsckson
a、jsckson的使用
Spring MVC 怎么接收跟发送 json 格式的对象呢?
首先先导入依赖:
然后是 java 代码:
然后看下结果:
可以看到 json 格式的返回成功了,但是时间的格式不对,需要格式化:
上图中,可以看到本来应该是 username 的字段,显示为 name,可以通过注解,修改生成后的 json 格式显示的属性名,让本来 username 改名为 name:
MVC的底层还是 ObjectMapper 来转换 json 格式和对象。
b、xml 配置 jackson 自定义转换逻辑
如果不写注解,可以通过 xml 配置去完成 json 格式的转换:
c、把 json 格式转换为对象
注意:必须传进来的是 json 格式,而不是键值对方式。
2、gson 的使用
a、依赖导入
然后是 web.xml 配置:
b、格式化
首先就在 java 代码处新建一个对象:
然后是 xml 配置:
gson 主要是安卓用的多
3、fastjson
fastjson 因为是引入外部的依赖,所以一定需要自己手动配置 httpMessageConverter 。
xml 配置:
java 代码没有变化。
如果有报错,那就是需要加上这个玩意:
4、json 的一些问题
上一篇博客中,有直接返回字符串的案例,如果是中文的情况下可能会有乱码,解决方式如下:
5、静态资源
静态资源,比如:html、css、js、图片、mp3、mp4,该怎么放呢( jsp 是动态资源)?
静态资源默认情况下是访问不到的,因为拦截规则写了 / ,意思是拦截所有请求,包括静态资源。
解决办法有三种:
a、办法一 —— *.action
可以给所有请求加个 action,这样依赖静态资源就不会拦截了,但是弊端也很明显,所有接口都要改。
b、办法二——默认处理器处理
这里得是一个 / 。
就只需要改动这么点,就能访问到静态资源。
c、办法三——路径匹配(推荐)
三、sessionAttributes——把属性存入 session 中
@sessionAttributes 这个注解能够把属性存入到 session 中,同样的,也有方法自动从 session 中取出来:
1、存属性
2、取属性
注意:如果 session 中没有对应的属性,是会报错的。
3、移除属性
四、全局异常处理
异常不能像平时那样贪方便直接各种 try…catch 处理,要有地方专门统一的处理,用的还是 AOP 那套。
1、前期准备
依赖导入:
java代码:
xml 文件配置:
web xml 文件配置:
2、方式一——实现 HandlerExceptionResolver 接口(推荐)
创建一个类,并实现 HandlerExceptionResolver:
jsp 页面:
然后效果:
3、方式二——注解 @ControllerAdvice(推荐)
然后效果:
这个方式的好处是一个类可以定义很多个处理方法。
4、方式三—— spring-servlet.xml 文件配置
效果: