sprintboot-learn(三)
全局异常处理
太简单,没有保存示例工程
方式1:
启动,测试结果:
Value表示捕捉那些异常,是一个异常组,如果有多个异常,可以用{}括起来。建议都用exception,然后用instenceof判断,或者自定义一个异常,所有controller都抛出这个异常,然后直接捕获该自定义异常。
方式2:
其他不变,把exceptionHandler删掉,或者注释掉。在Testcontroller中添加以上exceptionHandler方法(可以把该方法放进一个父类中,让所有需要捕获异常的子类去继承,由于子类添加了Controller注解,所以如果写成父类的话,父类可以不用加@Controller注解,加了也不会报错)。
启动,执行结果:
这个时候,即使ExceptionHandler没有注释掉,也会返回这个,继承的优先级应该要高些。
总结:两种方式都使用了@ExceptionHandler注解,一种是使用继承的方式,优先级高,父类不需要任何注解。第二种是全局,需要在自定义全局异常处理类上加注解@ControllerAdvice。看第二种方法返回的code并不是服务器的code,只要请求成功了,服务器状态码都是200(已用postman验证),这里的400仅仅是我们返回的一条数据而已。注解@ResponseStatus也没有起作用。
Jsp支持
示例工程:springboot-jsp
首先添加依赖:
新建文件夹src/main/webapp,webapp一定要放在src/main下面。
第一种(不推荐):
直接返回一张页面:
第二种:
application.properties配置(相当于springMVC的前缀后缀的那种配置):
Controller:
第三种:
直接返回页面路径(注释掉前后缀的配置)
项目能运行:但是打成jar之后访问不到jsp了,此问题还未解决。
个人认为,jsp和使用模板的效果差不多,页面输出流程也一样,都是从服务器端渲染,然后输出到浏览器。
校验
示例工程:springboot_validate
校验和springmvc一样。
不过这里如果要配置属性文件的话,mvc是配置的xml文件:如下
但是在springboot中这个配置要换成@Bean的方式配置。
这个配置里面配置了默认编码方式为UTF-8。
当然也可以像xml里面一样配置fileEncodings,但是这个配置是properties属性,我们不能像xml一样直接传递一个utf-8的字符串给他。
看图,可以知道我们设置了p.put(key,value),其中key为setBasename函数的参数,也就是我们制定的配置文件的名字,这是因为源码在取的时候是使用的filename为key来取的。而这个filename必须跟setNasename时候传入的值一模一样。这种方式可以指定每一个资源文件的分别用什么编码去读取,如果没设置就用默认编码(defaltEncoding)。
这个编码不能控制spring读取application.properties文件的编码,也就是所我们这个文件的编码是utf-8读取的,但是spring自己读取application.properties资源文件的时候指定编码方式还得重新spring.messages.encoding=UTF-8使用指定。
application.properties: app.name.null
validateSource.properties: name.null
这个读取跟spring读取是两个东西,可以看出来我们读取的是validateSource.application文件和spring读取的application.ptoperties,而spring读取的app.name.null的值,
而校验的时候输出的{name.null}是正常的:
至于这个配置文件写错误原因的,可以直接使用unicode编码,idea也支持,而且springboot支持得也很好。
over~~~
转载于:https://my.oschina.net/wtkid/blog/2244951