SpringBoot MVC 攔截器

SpringBoot MVC

環境搭建

  1. 在pom.xml添加spring-boot-starter-web

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
  2. 修改application.yml配置

    
    spring:
     datasource:
      username: system
      password: 123456
      url: jdbc:oracle:thin:@localhost:1521:XE
      driverClassName: oracle.jdbc.OracleDriver
    server:
     port: 8889
    
  3. 編寫Controller,使用@RequestMapping和@RestController

    @RestController
    public class BookService {
    
        @Autowired
        private BookDao bookDao;
    
        @RequestMapping(value="/book",method=RequestMethod.GET)
        public List<Book> loadAll(){
            return bookDao.findAll();
        }
    
        @RequestMapping(value="/book/{id}",method=RequestMethod.GET)
        public Book load(@PathVariable("id")int id){
            return bookDao.findById(id);
        }
    
        @RequestMapping(value="/book/{id}",method=RequestMethod.DELETE)
        public boolean delete(@PathVariable("id")int id){
            int row = bookDao.deleteById(id);
            if(row >= 1){
                return true;
            }else{
                return false;
            }
        }
    
        @RequestMapping(value="/book/{id}",method=RequestMethod.PUT)
        public boolean update(@PathVariable("id")int id, @RequestBody Book book){
            book.setId(id);
            int row = bookDao.update(book);
            if(row >= 1){
                return true;
            }else{
                return false;
            }
        }
    
        @RequestMapping(value="/book",method=RequestMethod.POST)
        public boolean add(@RequestBody Book book){
            bookDao.save(book);
            return true;
        }
    }
    
  4. 編寫Filter,解決Ajax調用跨域問題

    @WebFilter(servletNames={"dispatcherServlet"})
    public class AjaxDomainFilter implements Filter{
    
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            HttpServletResponse httpResponse = (HttpServletResponse)response;
            httpResponse.setHeader("Access-Control-Allow-Origin", "*");//設置允許哪些域名應用進行ajax訪問
            httpResponse.setHeader("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");
            httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type");
            chain.doFilter(request, response);//調用後續serlvet
        }
    
        @Override
        public void init(FilterConfig arg0) throws ServletException {
            // TODO Auto-generated method stub
    
        }
    
    }
    
  5. 配置Filter,使用@WebFilter和@ServletComponentScan

    @SpringBootApplication//開啓掃描、自動配置、bean定義
    @MapperScan(basePackages={"cn.xdl.dao"})//開啓掃描Mapper接口
    @ServletComponentScan//開啓WebFilter、WebServlet、WebListener配置支持
    public class BootApplication {
    
        public static void main(String[] args){
            SpringApplication.run(BootApplication.class, args);
        }
    
    }
    
  6. 修改pc_web前端的common.js,將請求路徑改爲

    var path = "http://localhost:8889";
    

SpringBoot 熱啓動

當修改完畢程序代碼後,可以自動重新部署。

 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
</dependency>

如果修改了pom.xml定義,要從新啓動,修改了java代碼可以自動重新啓動。

SpringBoot MyBatis分頁

<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper-spring-boot-starter</artifactId>
  <version>1.2.3</version>
</dependency>

然後在調用查詢代碼之前執行PageHelper.startPage方法

Page page = PageHelper.startPage(p, 3);
//分頁查詢
List list = bookDao.findAll();
//獲取總頁數
int totalPage = page.getPages();

SpringBoot 攔截器

  1. 編寫攔截器類,實現HandlerInterceptor接口,實現PreHandle、PostHandle、afterCompletion方法

    public class AjaxDomainInterceptor implements HandlerInterceptor{
    
        @Override
        public boolean preHandle(
            HttpServletRequest request, 
            HttpServletResponse response, Object handler)
                throws Exception {
            response.setHeader("Access-Control-Allow-Origin", "*");//設置允許哪些域名應用進行ajax訪問
            response.setHeader("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");
            response.setHeader("Access-Control-Allow-Headers", "Content-Type");
            return true;
        }
    
        //...
    }
    
  2. 編寫配置類,繼承WebMvcConfigurerAdapter,重寫addInterceptors方法

    //@Configuration
    @Component
    public class InterceptorConfiguration extends WebMvcConfigurerAdapter{
    
        public void addInterceptors(InterceptorRegistry registry) {
            //配置攔截器
            AjaxDomainInterceptor ajaxDomain = new AjaxDomainInterceptor();
            registry.addInterceptor(ajaxDomain).addPathPatterns("/**");
        }
    
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章