1. 程式人生 > >springBoot入門案例2-之MVC的簡單配置

springBoot入門案例2-之MVC的簡單配置

上一篇已經介紹了關於springboot的入門,執行啟動類後我們發現springboot已經集成了springMVC的功能。但大多數情況下我們還需要對springBoot預設配置進行修改

通過檢視springboot的官方文件有這麼一段話---段落標題:27.1.1 Spring MVC Auto-configuration

這段的翻譯

       如果你想要保持Spring Boot 的一些預設MVC特徵,同時又想自定義一些MVC配置(包括:攔截器,格式化器, 檢視控制器、訊息轉換器 等等),你應該讓一個類實現WebMvcConfigurer,並且新增@Configuration

註解,但是千萬不要@EnableWebMvc註解。如果你想要自定義HandlerMappingHandlerAdapterExceptionResolver等元件,你可以建立一個WebMvcRegistrationsAdapter例項 來提供以上元件。

      如果你想要完全自定義SpringMVC,不保留SpringBoot提供的一切特徵,你可以自己定義類並且新增@Configuration註解和@EnableWebMvc註解

現在我們來自定義部分SpringMVC配置試一試,條件:自定義一個類實現WebMvcConfigurer並新增@Configuration註解

首先自定義一個攔截器

package com.jackzou.interceptor;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @描述 TODO
 * @作者 zouss
 * @建立時間 2018/9/17  15:35
 * @版本: 1.0
 **/
@Configuration
public class TestInterceptor implements HandlerInterceptor {
    private final Logger logger = LoggerFactory.getLogger(TestInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        logger.debug("preHandle method is running");
        logger.info("hello{235}");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        logger.debug("postHandle method is running");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        logger.debug("afterCompletion method is running");
    }
}

然後新建一個SpringMVC的配置類,上文說道部分配置的話只需要實現WebMvcConfigurer,將攔截器註冊到spring容器中去。

重寫介面中的addInterceptors方法,新增自定義的攔截器,通過registery來註冊攔截器,用過addPathPatterns來新增路徑。

package com.jackzou.configure;

import com.jackzou.interceptor.TestInterceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;


/**
 * @描述 部分配置MVC的攔截器
 * @作者 zouss
 * @建立時間 2018/9/17 0017 15:50
 * @版本: 1.0
 **/
@Configuration
public class MvcConfig implements WebMvcConfigurer {

    private Logger logger = LoggerFactory.getLogger(MvcConfig.class);

    /**
     * 通過@Bean註解,將我們定義的攔截器註冊到Spring容器
     *
     * @return
     */
    @Bean
    public TestInterceptor testInterceptor() {
        return new TestInterceptor();
    }
    /**
     * 重寫介面中的addInterceptors方法,新增自定義攔截器
     *
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        logger.debug("preHandle method is running");
        // 通過registry來註冊攔截器,通過addPathPatterns來新增攔截路徑
        registry.addInterceptor(this.testInterceptor()).addPathPatterns("/**");
    }
}

controller層簡示例,以便能夠在頁面上展示

package com.jackzou.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @描述 TODO
 * @作者 zouss
 * @建立時間 2018/9/14 15:26
 * @版本: 1.0
 **/
@RestController
public class HelloController {
    @GetMapping(value = "hello")
    public String HelloController() {
        return "Hello SpringBoot !";
    }
}

執行啟動類

當我們傳送請求後發現idea的命令臺上多了這麼幾行

這是我們自定義的攔截器。當然springboot預設的日誌輸出是不會顯示debug的這裡需要你自己去更改下配置,我的配置檔案是

application.properties,如果你的是yml格式的話請參照修改

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mysql_pritice
jdbc.username=root
jdbc.password=root
# 設定com.jackzou包的日誌級別為debug
logging.level.com.jackzou.configure=debug
logging.level.com.jackzou.interceptor=debug