3. SpringBoot 中 Controller 层的注解
3.1 @Controller 注解
@Controller : 加在类上面的注解,使得类里面的每个方法都返回一个视图页面。
但是在实际开发中,我们一般只是让后端的方法返回给前端是查询的数据,而不是一个新的视图页面。如果使用 @Controller 注解必须结合 @ResponseBody,让这个方法返回给前端的不是一个视图,而只是给前端传递查询到的数据。
可以把 @ResponseBody 注解加到 Controller 类上或者是 Controller 层的方法上。
-
@ResponseBody 添加到类上:代表这个类中国所有的方法都返回的数据,而不是视图。
-
@ResponseBody 添加到方法上:代表只有这个方法返回的是数据,其他没有声明的返回的还是视图。
@Controller
public class HelloController {
@GetMapping(value="/hello")
@ResponseBody
public String say(){//返回json 数据
return "gril";
}
@GetMapping(value="/hello1")
public String say1(){//返回视图
return "sys/index1";
}
为了解决这个麻烦的操作,SpringBoot 中提供了 @RestController 注解解决这个问题,如下:
3.2 @RestController
@RestController :从 Spring 4.0 以后产生的,用来将 json/xml数据发送到前台页面,而不是返回视图页面。它相当于 @Controller 和 @ResponseBody。
@RestController 加在类上面的注解,使得类里面的每个方法都将 json/xml 返回数据加返回到前台页面中。梭所以在实际开发中,我们一般都使用这个注解。
3.3 @RequestMapping("路径信息")
@RequestMapping("路径信息") :@RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些 URL 请求。这个注解可以使用在 Controller 层的类或者方法上。
@RequestMapping 中的参数:
-
path : 指定路径,和 value 没有区别,只是 path 不可以省略,value 可以省略。
3.3.1 注解在 Controller 类上
-
将 @RequestMapping 注解在 Controller 类上,这时类的注解是相对于 Web 根目录,而方法上的是相对于类上的路径。
-
注意: @RequestMapping("/index") 等同于 @RequestMapping(value = "/index")
@RestController
@RequestMapping("/user")
// @RequestMapping(value = "/user")
public class UserController {
@RequestMapping("/login")
public String login() {
return "success";
}
}
// 此时请求的实际路径是:/user/login
// 在类上的@RequestMapping相当于声明一个根路径,在请求的时候他会把类和方上的路径进行拼接
3.3.2 注解在 Controller 类的方法上
method 属性:
通过 method 属性来指定请求的类型:有 GET(查)、POST(增)、PUT(改)、DELETE(删),由于浏览器表单无法发送 DELETE 和 PUT 请求,如果使用的话需要进行处理,所以我们在开发中一般使用 CET 和 POST 请求方式完成请求任务。
-
通过 @RequestMapping(value="/login",method=RequestMethod.GET) 来指定 login()方法 仅处理通过 GET 方式发来的请求
@RestController
@RequestMapping(path = "/user")
public class UserController {
// 通过 method 属性来指定请求的类型,此时只能使用GET请求访问,使用POST会报错。
@RequestMapping(path = "/login", method=RequestMethod.GET)
public String login() {
return "success";
}
}
通过 @RequestMapping(value="/login",method=RequestMethod.POST) 来指定 login()方法 仅处理通过 POST 方式发来的请求
@RestController
@RequestMapping(path = "/user")
public class UserController {
// 通过 method 属性来指定请求的类型,此时只能使用POST请求访问,使用GET会报错。
@RequestMapping(path = "/login", method=RequestMethod.POST)
public String login() {
return "success";
}
}
由于在 RequestMapping 注解类中 method() 方法返回的是 RequestMethod 数组,所以可以给 method 同时指定多个请求方式,例如
@RestController
@RequestMapping(path = "/user")
public class UserController {
// 该方法将同时接收通过GET和POST方式发来的请求
@RequestMapping(path = "/login", method={RequestMethod.POST,RequestMethod.GET})
public String login() {
return "success";
}
}
params 属性:
-
@RequestMapping 的 params 属性,该属性表示请求参数,也就是追加在 URL 上的键值对,多个请求参数以 &隔开,例如:
http://localhost/SpringMVC/user/login?username=kolbe&password=123456
则这个请求的参数为 username=kolbe 以及 password=123456,@RequestMapping 中可以使用 params 来限制请求参数,来实现进一步的过滤请求,举个例子:
@Controller
@RequestMapping(path = "/user")
public class UserController {
// 该方法将接收 /user/login 发来的请求,且请求参数必须为 username=kolbe&password=123456
@RequestMapping(path = "/login", params={"username=kolbe","password=123456"})
public String login() {
return "success";
}
}
-
该例中则表示 UserController 中的 login() 方法仅处理 /user/login 发来的请求,且必须带有 username=kolbe&password=123456 的请求参数,否则浏览器将返回 HTTP 404 的错误。
headers 属性:
-
@RequestMapping 的 headers 属性,该属性表示请求头。
通过 @RequestMapping 中的 headers 属性,可以限制客户端发来的请求。
@Controller
@RequestMapping(path = "/user")
public cl