天天看点

springboot访问映射(RESTful)1. 控制器方式映射2 配置类方式映射REST风格问题

Spring_Boot专栏
上一篇 主目录 下一篇

目录

  • 1. 控制器方式映射
  • 2 配置类方式映射
    • 方式一
    • 方式二
  • REST风格
  • 问题
    • 1 put被当做post

【前言】

访问映射:在浏览器地址栏中输入http://localhost:8080/index,其中/index的请求映射到某方法进行处理或者映射到某个页面

访问映射又两种方式,控制器和配置类。

传统的

url

地址:http://localhost:8080/addEmp?id=01&name=shane&… ,而使用

REST

风格更能直观简介。

1. 控制器方式映射

在controller.HelloController.class类中【需要在类名标明@Controller】:

@RequestMapping({"/","/index"})
    public String index(){
        return "index";
    }
           

这个方法将/和/index的请求映射到静态资源的index.html页面,由于是@RequestMapping()方法,会自动拼接上.html后缀。目录结构如下:

springboot访问映射(RESTful)1. 控制器方式映射2 配置类方式映射REST风格问题

映射结果为:

springboot访问映射(RESTful)1. 控制器方式映射2 配置类方式映射REST风格问题

【注意】

如果在控制器类controller.HelloController.class中以

@ResponseBody
@RequestMapping("/hello")
public String hello(){
        return "你好!";
}
           

@ResponseBody

@RequestMapping("/hello") 的方式给方法进行标注,则会在该请求页面返回“你好!”字符串。

springboot访问映射(RESTful)1. 控制器方式映射2 配置类方式映射REST风格问题

步骤总结

1.编写控制类,标注@Controller

2.编写方法(方法名任意),标@RequestMapping({"/","/index"})

3.返回要映射到的页面等。return “index”:映射到index.html页面

2 配置类方式映射

springboot访问映射(RESTful)1. 控制器方式映射2 配置类方式映射REST风格问题

方式一

1.配置类实现WebMvcConfigurer接口。注意标注@Configuration

2.重写addViewControllers()方法,@Override

3.注册视图控制器,将addViewController("/login")中/login映射到视图(页面)setViewName(“login”) login.html

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/login").setViewName("login");
    }

           

方式二

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

    //所有的WebMvcConfiguration组件都会一起作用
    @Bean//将组件注册在容器中
    public WebMvcConfigurer webMvcConfigurer(){
        WebMvcConfigurer webMvcConfigurer = new WebMvcConfigurer(){
            @Override
            public void addViewControllers(ViewControllerRegistry registry) {
                registry.addViewController("/main.html").setViewName("dashboard");
            }
        };
        return webMvcConfigurer;
    }
           

REST风格

URI:/资源名称/资源标识 HTTP

请求方式

区分对资源CRUD操作

普通CRUD(uri来区分操作) RestfulCRUD
查询 getEmp emp—GET
添加 addEmp?xxx emp—POST
修改 updateEmp?id=xxx&xxx=xx emp/{id}—PUT
删除 deleteEmp?id=1 emp/{id}—DELETE

例如:

实验功能 请求URI 请求方式
查询所有员工 emps GET
来到添加页面 emp GET
添加员工 emp POST
来到修改页面(查出员工进行信息回显) emp/1 GET
修改员工 emp PUT
删除员工 emp/1 DELETE

问题

1 put被当做post

在实现 restful 的更新操作时,需要将表单数据以 PUT 方法提交:

当emp!=null,即需要put请求进行修改时,服务器却将其作为post来处理。

原因:

在 Spring Boot 的 META-INF/spring-configuration-metadata.json 配置文件中,默认是关闭 Spring 的 hiddenmethod 过滤器的,所以直接在表单提交的数据中添加 “_method” 数据并不起作用。:

springboot访问映射(RESTful)1. 控制器方式映射2 配置类方式映射REST风格问题
{
      "name": "spring.mvc.hiddenmethod.filter.enabled",
      "type": "java.lang.Boolean",
      "description": "Whether to enable Spring's HiddenHttpMethodFilter.",
      "defaultValue": false
    },
           

解决方式:

在 Spring Boot 的配置文件 application.properties 中将 hiddenmethod 过滤器设置为启用即可:

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

继续阅读