springBoot入门案例2-之MVC的简单配置

上一篇已经介绍了关于springboot的入门,执行启动类后我们发现springboot已经集成了springMVC的功能。但大多数情况下我们还需要对springBoot默认配置进行修改

通过查看springboot的官方文档有这么一段话---段落标题:27.1.1 Spring MVC Auto-configuration

官方文档链接:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-developing-web-applications

这段的翻译

       如果你想要保持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 !";
    }
}

执行启动类

然后在浏览器输入:http://localhost:8080/hello

当我们发送请求后发现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

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中,可以通过配置`server.servlet.context-path`来设置应用程序的上下文路径(即context-path)。如果需要统一添加前缀,则可以使用Spring MVC中的`HandlerInterceptor`来拦截请求,并在请求路径前添加前缀。 具体步骤如下: 1. 创建一个`HandlerInterceptor`实现类,实现`preHandle`方法,在该方法中获取请求路径并添加前缀,然后将修改后的路径设置回请求中。 ``` @Component public class PrefixInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String prefix = "/api"; // 前缀 String requestURI = request.getRequestURI(); // 请求路径 String newURI = prefix + requestURI; // 添加前缀 request.getRequestDispatcher(newURI).forward(request, response); // 设置修改后的路径 return true; } } ``` 2. 在Spring Boot配置类中添加`InterceptorRegistry`,并将上面创建的`HandlerInterceptor`添加到其中。 ``` @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Autowired private PrefixInterceptor prefixInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(prefixInterceptor).addPathPatterns("/**"); // 添加拦截器并设置拦截路径 } } ``` 3. 在`Controller`中使用`@RequestMapping`注解指定接口路径,如`/user`,拦截器会自动添加前缀,最终的请求路径为`/api/user`。 ``` @RestController @RequestMapping("/user") public class UserController { @GetMapping("/list") public List<User> list() { // ... } // ... } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值