SpringBoot2.X 版本 WebMvcConfigurerAdapter 弃用

SpringBoot2.X 版本 WebMvcConfigurerAdapter 弃用

以下WebMvcConfigurerAdapter 比较常用的重写接口

/** 解决跨域问题 **/
public void addCorsMappings(CorsRegistry registry) ;
/** 添加拦截器 **/
void addInterceptors(InterceptorRegistry registry);
/** 这里配置视图解析器 **/
void configureViewResolvers(ViewResolverRegistry registry);
/** 配置内容裁决的一些选项 **/
void configureContentNegotiation(ContentNegotiationConfigurer configurer);
/** 视图跳转控制器 **/
void addViewControllers(ViewControllerRegistry registry);
/** 静态资源处理 **/
void addResourceHandlers(ResourceHandlerRegistry registry);
/** 默认静态资源处理器 **/
void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);

新的

1.实现WebMvcConfigurer(推荐使用)

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
     @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("login");
        registry.addViewController("/login.html").setViewName("login");
        registry.addViewController("/main.html").setViewName("dashboard");
    }
}

2.继承 WebMvcConfigurationSupport

继承WebMvcConfigurationSupport这个类,在扩展的类中重写父类的方法即可,但是这种方式是有问题的,这种方式会屏蔽Spring Boot的@EnableAutoConfiguration中的设置。这时候启动项目时会发现映射根本没有成功,读取不到静态的资源也就是说application.properties中添加配置的映射配置没有启动作用,然后我们会想到重写来进行映射:

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MyMvcConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/resources/static");
    }
    @Override
    protected void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("login");
        registry.addViewController("/login.html").setViewName("login");

    }
    
}

thymeleaf

springBoot2.0版本以上不用再切换thyme leaf版本

层叠样式

必须使用对应的rel值

<link rel="stylesheet" type="text/css" href="../static/css/bootstrap.min.css" th:href="@{css/bootstrap.min.css}">

加入rel=“stylesheet” 就好了(表示文档的外部样式表)

th:actioin处理登录请求

method:post方式的请求

<form class="form-signin" action="dashboard.html" th:action="@{/user/login}" method="post">

@RequestParam(“username”) @RequestParam(“password”)

只要添了@RequestParam 注解,一旦没提交就会报错。

@Controller
public class LoginController {
    @PostMapping(value="/user/login")
    public String login(@RequestParam("username") String username,
                        @RequestParam("password") String password,
                        Map<String, Object> map){
        if(!StringUtils.isEmpty(username)&&"123456".equals(password)){
            return "redirect:/main.html";
        }else{
            map.put("msg","用户名密码错误");
            return "login";
        }

    }
}

HandlerInterceptor

一个方法要成为拦截器必须实现HandlerInterceptor接口


public class LoginHandlerInterceptor implements HandlerInterceptor {
    
}

重定向页面

request.getRequestDispatcher("/index.html").forward(request,response);

forward把页面写出去,记得一定要写出去

1: 开启HiddenHttpMethodFilter[#](https://www.cnblogs.com/dgwblog/p/11976640.html#2783284569

处理DeleteMapping请求时,前端发来的请求依旧时post请求,在配置文件中添加

最新版本的spring boot 默认不开启 restful 分割api

开启方法

# 启用hiddenMethod过滤器
spring.mvc.hiddenmethod.filter.enabled=true

通过使用隐藏域参数来

th:attr="del_uri=@{/emp/}+${emp.id}"

当然也可以使用传统POST 来做处理 , 在from里面多做几个参数

你可能感兴趣的:(SpringBoot2.X 版本 WebMvcConfigurerAdapter 弃用)