SpringBoot中的WebMvcConfigurer

SpringBoot中的WebMvcConfigurer

  • 一、WebMvcConfigurer
  • 二、页面跳转控制器
  • 三、数据格式化
    • 1.Formatter\
    • 2.内容转换器
  • 四、拦截器


一、WebMvcConfigurer

  • WebMvcConfigurer 作为配置类,采用 JavaBean 的形式来代替传统的 XML 配置文件形式,进而针对框架个性化定制。就是 SpringMVC 的 XML 配置文件的 JavaConfig(编码)实现方式。自定义 Interceptor、ViewResolver、MessageConverter。WebMvcConfigurer 就是 JavaConfig 形式的 SpringMVC 的配置文件。
  • WebMvcConfigurer 是一个接口,需要自定义一个对象,实现接口并覆盖某个方法。
public interface WebMvcConfigurer {
	// 帮助配置 HandlerMapping
	default void configurePathMatch(PathMatchConfigurer configurer) {}
	// 处理内容协商
	default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {}
	// 异步请求
	default void configureAsyncSupport(AsyncSupportConfigurer configurer) {}
	// 配置默认 Servlet
	default void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {}
	// 配置内容转换器
	default void addFormatters(FormatterRegistry registry) {}
	// 配置拦截器
	default void addInterceptors(InterceptorRegistry registry) {}
	// 处理静态资源
	default void addResourceHandlers(ResourceHandlerRegistry registry) {}
	// 配置全局跨域
	default void addCorsMappings(CorsRegistry registry) {}
	// 配置视图页面跳转
	default void addViewControllers(ViewControllerRegistry registry) {}
	// 配置视图解析器
	default void configureViewResolvers(ViewResolverRegistry registry) {}
	// 自定义参数解析器,处理请求参数
	default void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {}
	// 自定义控制器方法返回值处理器
	default void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {}
	// 配置 HttpMessageConverters
	default void configureMessageConverters(List<HttpMessageConverter<?>> converters) {}
	// 配置 HttpMessageConverters
	default void extendMessageConverters(List<HttpMessageConverter<?>> converters) {}
	// 配置异常处理器
	default void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {}
	// 扩展异常处理器
	default void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {}
	// JSR303 的自定义验证器
	@Nullable
	default Validator getValidator() {
		return null;
	}
	// 消息处理对象
	@Nullable
	default MessageCodesResolver getMessageCodesResolver() {
		return null;
	}
}

二、页面跳转控制器

  • SpringBoot 中使用页面视图,比如 Thymeleaf。要跳转显示某个页面,必须通过 Controller 对象。也就是我们需要创建一个 Controller,转发一个视图才行。如果我们现在需要显示多个页面,可以无需这个 controller。addViewControllers() 完成请求到视图跳转。
  • ① 创建一个视图:login.html
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>登录页面title>
    head>
    <body>
      <h1 style="color: red; text-align: center">欢迎来到登录页面!!!h1>
    body>
    html>
    
  • ② 创建 SpringMVC 配置类
    @Configuration
    public class MvcSetting implements WebMvcConfigurer {
    	// 跳转页面视图
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/login").setViewName("/login");
        }
    }
    

③ 结果展示
SpringBoot中的WebMvcConfigurer_第1张图片


三、数据格式化

1.Formatter

  • Formatter 是数据转换接口,将一种数据类型转换为另一种数据类型。与 Formatter 功能类似的还有 ConverterFormatter 只能将 String 类型转为其他数据类型。 这点在 Web 应用中适用广泛。因为 Web 请求的所有参数都是 String 类型的,我们需要把 String 转为 Integer、Long、Date 等等。
  • Spring 中内置的一些 Formatter:
    • DateFormatter:String 和 Date 之间的解析与格式化。
    • InetAddressFormatter:String 和 InetAddress 之间的解析与格式化。
    • PercentStyleFormatter:对百分数进行一个格式化。
    • NumberFormatter:String 和 Number 之间的解析与格式化。
  • 我们在使用 @DateTimeFormat、@Numberformat 注解时,就是通过 Formatter 解析 String 类型到我们期望的 Date 或 Number 类型。
  • Formatter 也是 Spring 的扩展点,我们处理特殊格式的请求数据时,能够自定义合适的 Formatter,将请求的 String 数据转为我们的某个对象,使用这个对象更加方便我们后续的编码。
    public interface Formatter<T> extends Printer<T>, Parser<T> {
    }
    
  • Formatter 是一个组合接口,没有自己的方法。内容来自 Printer 和 parse 两个接口。
    • Printer:将 T 类型转为 String,格式化输出。

      @FunctionalInterface
      public interface Printer<T> {
      	String print(T object, Locale locale);
      }
      
    • Parser:将 String 类型转为期望的 T 对象。

      @FunctionalInterface
      public interface Parser<T> {
      	T parse(String text, Locale locale) throws ParseException;
      }
      

2.内容转换器

  • 我们在实际的项目开发中,可能面对多种类型的项目,复杂程度有简单,有复杂的。特别是和硬件打交道的项目,数据的格式与一般的 name:jack,age:20 不同。数据有可能是一串数据 “1345;46;dfd;ASDS;12DF;df&12”
  • ① 自定义 Formatter
    public class DeviceInfoFormatter implements Formatter<List<String>> {
    
        @Override
        public List<String> parse(String text, Locale locale) throws ParseException {
            String[] infos = text.split(";");
            List<String> stringList = Arrays.asList(infos);
            return stringList;
        }
    
        @Override
        public String print(List<String> object, Locale locale) {
            return object.toString();
        }
    }
    
  • ② 登记内容转换器
    @Configuration
    public class MvcSetting implements WebMvcConfigurer {
        // 跳转视图页面控制器
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
    
            registry.addViewController("/login").setViewName("/login");
    
        }
        // 登记内容转换器
        @Override
        public void addFormatters(FormatterRegistry registry) {
            registry.addFormatter(new DeviceInfoFormatter());
        }
    }
    
  • ③ 创建 Controller 接收请求
    @Controller
    public class DeviceController {
        @ResponseBody
        @PostMapping("/device/postInfo")
        public String postDeviceInfo(@RequestParam("deviceInfo")List<String> list){
            return list.toString();
        }
    }
    
  • ④ 测试与结果展示
    SpringBoot中的WebMvcConfigurer_第2张图片

四、拦截器

  • HandlerIntercepter 接口和它的实现类被称为拦截器,是 SpringMVC 的一种对象。拦截器是 SpringMVC 框架提供的对象与 Servlet 无关。拦截器能够预先处理发给 Controller 的请求。可以决定请求是否被 Controller 处理。用户请求是先由 DispatchServlet 接收后,在 Controller 之前执行的拦截器对象。

你可能感兴趣的:(#,Spring,Boot,spring,boot,windows,后端)