以下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");
}
}
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 注解,一旦没提交就会报错。
@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接口
public class LoginHandlerInterceptor implements HandlerInterceptor {
}
request.getRequestDispatcher("/index.html").forward(request,response);
forward把页面写出去,记得一定要写出去
处理DeleteMapping请求时,前端发来的请求依旧时post请求,在配置文件中添加
最新版本的spring boot 默认不开启 restful 分割api
开启方法
# 启用hiddenMethod过滤器
spring.mvc.hiddenmethod.filter.enabled=true
通过使用隐藏域参数来
th:attr="del_uri=@{/emp/}+${emp.id}"
当然也可以使用传统POST 来做处理 , 在from里面多做几个参数