@Controller
用于标记一个类是Spring MVC的Controller对象,处理HTTP请求。具体来说,@Controller注解告诉Spring框架,这个类是一个控制器,可以处理来自客户端的请求。在Spring MVC中,控制器是一个用于处理HTTP请求的Java类。控制器类中的方法可以处理不同的请求,并返回相应的响应。
@Controller
public class MyController {
@RequestMapping("/hello")
public String hello() {
return "hello";
}
}
在上面的示例中,@Controller注解标记了MyController类,表示它是一个控制器。@RequestMapping注解指定了处理请求的URL路径,这里是/hello。hello()方法返回一个字符串hello,表示要渲染的视图的名称。在这个例子中,Spring框架将查找名为hello的视图,并将其呈现给客户端。
注解位置: 类上
@ResponseBody
用于将Controller方法返回的对象转化为指定格式的响应体。添加了该注解的方法具有如下特性:
- 方法的返回值不再作为界面跳转,而是直接作为返回的数据
- 将方法的返回的数据自动使用jackson转换为JSON
注解位置: 方法上
@RestController
相当于@Controller+@ResponseBody的组合。标识该类中的每个方法都是直接json格式的对象,省去在每个放上上都加@ResponseBody的麻烦。
注解位置: 类上
@RequestMapping
用于映射请求URL和Controller类、方法的关系。详细功能参照:“03.springMVC请求控制”章节
注解位置: 类或方法上
@PostMapping
指定当前发送请求的方式只可以是post请求。相当于@RequestMapping(method = RequestMethod.POST)
注解位置: 方法上
@GetMapping
指定当前发送请求的方式只可以是post请求。相当于@RequestMapping(method = RequestMethod.GET)
@RequestParam
把请求中指定名称的参数给控制器中的形参赋值。他有两个比较关键的属性:
- value:请求参数中的名称。
- required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供将报错。
@RequestMapping("/getRequestParam")
public String getRequestParam(@RequestParam("name")String uname, @RequestParam(value="age",required=false)Integer age){
System.out.println(username+","+age);
return "success";
}
注解位置: 参数上
@PathVariable
获得请求路径中的参数。详细功能参照:“04.springMVC获得请求参数1”章节
注解位置: 参数上
@RequestBody
用于获取post请求体json格式的字符串内容,可以直接转换为对象,当然也可以用最通用的String来接收。
@RequestMapping("/getParamByPojoWithJson")
public String getParam6(@RequestBody UserInfo userInfo) {
return userInfo.toString();
}
注解位置: 参数上
@RequestHeader
用于获取请求消息头。两个比较重要的属性:
- value:提供消息头名称
- required:是否必须有此消息头。默认true,表示必须要有此消息头
@RequestMapping("/getRequestHeader")
public String getRequestHeader(@RequestHeader(value="token", required=false)String requestHeader){
System.out.println(requestHeader);
return "success";
}
注解位置: 参数上
@CookieValue
用于把指定 cookie 名称的值传入控制器方法参数。两个必要重要的属性:
- value:指定cookie的名称
- required:是否必须有此cookie值。
@RequestMapping("/getCookie")
public String getCookie(@CookieValue(value="JSESSIONID",required=false) String cookieValue){
System.out.println(cookieValue);
return "success";
}
注解位置: 参数上
@CrossOrigin
解决ajax请求之间的跨域问题。两个比较重要的属性:
- origins:允许可以访问的域列表
- maxAge:准备响应前的缓存持续的最大时间(以秒为单位)。
跨域的场景:
@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
@GetMapping("/{id}")
public Account receive(@PathVariable Long id) { }
}
注解位置: 方法上
这里仅仅知道有这么一种方式即可,一般我们也不通过这种方式解决跨域问题。
全局配置解决跨域问题:
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedHeaders("*")
.allowedMethods("GET", "HEAD", "POST", "PUT", "OPTIONS", "DELETE", "PATCH")
.allowCredentials(true).maxAge(3600);
}
}