sprintboot-learn(三)

全局异常处理

太简单,没有保存示例工程

方式1:

sprintboot-learn(三)

sprintboot-learn(三)

sprintboot-learn(三)

sprintboot-learn(三)

启动,测试结果:sprintboot-learn(三)

sprintboot-learn(三)

Value表示捕捉那些异常,是一个异常组,如果有多个异常,可以用{}括起来。建议都用exception,然后用instenceof判断,或者自定义一个异常,所有controller都抛出这个异常,然后直接捕获该自定义异常。

方式2:

sprintboot-learn(三)

其他不变,把exceptionHandler删掉,或者注释掉。在Testcontroller中添加以上exceptionHandler方法(可以把该方法放进一个父类中,让所有需要捕获异常的子类去继承,由于子类添加了Controller注解,所以如果写成父类的话,父类可以不用加@Controller注解,加了也不会报错)。

启动,执行结果:

sprintboot-learn(三)

这个时候,即使ExceptionHandler没有注释掉,也会返回这个,继承的优先级应该要高些。

总结:两种方式都使用了@ExceptionHandler注解,一种是使用继承的方式,优先级高,父类不需要任何注解。第二种是全局,需要在自定义全局异常处理类上加注解@ControllerAdvice。看第二种方法返回的code并不是服务器的code,只要请求成功了,服务器状态码都是200(已用postman验证),这里的400仅仅是我们返回的一条数据而已。注解@ResponseStatus也没有起作用。

Jsp支持

示例工程:springboot-jsp

首先添加依赖:

sprintboot-learn(三)

sprintboot-learn(三)

新建文件夹src/main/webapp,webapp一定要放在src/main下面。

sprintboot-learn(三)

第一种(不推荐):

直接返回一张页面:

sprintboot-learn(三)

第二种:

application.properties配置(相当于springMVC的前缀后缀的那种配置):

sprintboot-learn(三)

Controller:

sprintboot-learn(三)

第三种:

直接返回页面路径(注释掉前后缀的配置)

sprintboot-learn(三)

项目能运行:但是打成jar之后访问不到jsp了,此问题还未解决。

个人认为,jsp和使用模板的效果差不多,页面输出流程也一样,都是从服务器端渲染,然后输出到浏览器。

校验

示例工程:springboot_validate

校验和springmvc一样。

不过这里如果要配置属性文件的话,mvc是配置的xml文件:如下

sprintboot-learn(三)

但是在springboot中这个配置要换成@Bean的方式配置。

sprintboot-learn(三)

这个配置里面配置了默认编码方式为UTF-8。

当然也可以像xml里面一样配置fileEncodings,但是这个配置是properties属性,我们不能像xml一样直接传递一个utf-8的字符串给他。

看图,可以知道我们设置了p.put(key,value),其中key为setBasename函数的参数,也就是我们制定的配置文件的名字,这是因为源码在取的时候是使用的filename为key来取的。而这个filename必须跟setNasename时候传入的值一模一样。这种方式可以指定每一个资源文件的分别用什么编码去读取,如果没设置就用默认编码(defaltEncoding)。

sprintboot-learn(三)

这个编码不能控制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的值,

sprintboot-learn(三)

而校验的时候输出的{name.null}是正常的:

sprintboot-learn(三)

至于这个配置文件写错误原因的,可以直接使用unicode编码,idea也支持,而且springboot支持得也很好。

 

over~~~

转载于:https://my.oschina.net/wtkid/blog/2244951