SpringBoot集成Freemarker模板技术和SpringBoot全局异常处理
前言
案例github地址(如果有用点个star呗) https://github.com/chenxiban/BlogCaseSet.git
SpringBoot 集成Mybatis框架
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮
件,配置文件,源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入
他们所开发产品的组件。
模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言。该意味着要准备数据在真实
编程语言中来显示,比如数据库查询和业务运算,之后模板显示已经准备好的数据。在模板中,你可以专注
于如何展现数据,而在模板之外可以专注于要展示什么数据。
Freemarker的作用主要是将动态页面转换成微静态html页面,提高搜索引擎的收录。具体框架的介绍和用法
可参考http://freemarker.foofun.cn。
SpringBoot框架提供了对Freemarker框架的集成操作,具体操作如下:
<!-- Spring Boot Freemarker 模板 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
- 在application.properties配置freemarker配置或者使用默认模板位置/src/main/resources/templates/
及默认后缀 .ftl 。
## Freemarker 配置
## 自定义模板文件配置路径默认模板路径在resources/templates下,默认后缀.ftl
##spring.freemarker.template-loader-path=classpath:/web/
##spring.freemarker.cache=false
##spring.freemarker.charset=UTF-8
##spring.freemarker.check-template-location=true
##spring.freemarker.content-type=text/html
##spring.freemarker.expose-request-attributes=true
##spring.freemarker.expose-session-attributes=true
##spring.freemarker.request-context-attribute=request
##spring.freemarker.suffix=.ftl
- 创建controller
package org.spring.springboot.controller;
import org.spring.springboot.domain.City;
import org.spring.springboot.service.CityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 城市 Controller 实现 Restful HTTP 服务
* <p>
* Created by bysocket on 07/02/2017.
*/
@Controller
public class CityController {
@Autowired
private CityService cityService;
/**
* http://localhost:8080/excep
*
* @return
*/
@RequestMapping("/excep")
public String excep() {
int k = 4 / 0;
return "city";
}
/**
* http://localhost:8080/index
*
* @return
*/
@RequestMapping("/index")
public @ResponseBody String index() {
return "SpringBoot SSM框架";
}
/**
* http://localhost:8080/api/city/1
*
* @param model
* @param id
* @return
*/
@RequestMapping(value = "/api/city/{id}", method = RequestMethod.GET)
public String findOneCity(Model model, @PathVariable("id") Long id) {
model.addAttribute("city", cityService.findCityById(id));
return "city";
}
/**
* http://localhost:8080/api/city
*
* @param model
* @return
*/
@RequestMapping(value = "/api/city", method = RequestMethod.GET)
public String findAllCity(Model model) {
List<City> cityList = cityService.findAllCity();
model.addAttribute("cityList", cityList);
return "cityList";
}
}
- 在目录下resources的templates创建模板文件
SpringBoot全局异常处理
任何项目发生异常是不可避免的,使用全局异常捕获发生的异常是十分必要的。SpringBoot框架对全局异常
捕获提供了很好的支持,并且操作非常简单。我们只需要创建一个类和一个方法,并添加两个注解:
@ControllerAdvice
和@ExceptionHandler
即可,如:
package org.spring.springboot.controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
*
* @Description: 全局异常处理类
* @ClassName: GlobalExceptionHandler.java
* @author ChenYongJia
* @Date 2017-10-5 下午6:27:21
* @Email 867647213@qq.com
*/
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class) // 捕获所有运行时异常
public String exceptionHandler() {
return "error";
}
}
其中,@ControllerAdvice:该注解是spring2.3以后新增的一个注解,主要是用来Controller的一些公共的需
求的低侵入性增强提供辅助,作用于@RequestMapping标注的方法上。@ExceptionHandler:该注解是配
合@ExceptionHandler一起使用的注解,自定义错误处理器,可自己组装json字符串,并返回到页面。
注意:如果想实现,不同的异常有不同的操作的话,只需要将 @ExceptionHandler的value的值不一样就可
以了,可以同时实现多个不同的异常处理,但不能出现包含状态。
由此可见,全局异常捕获的原理是: 使用AOP技术,采用异常通知的方式处理
。
最后
-
更多参考精彩博文请看这里:《陈永佳的博客》
-
喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!