06.springMVC常见注解

237 阅读3分钟

@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:准备响应前的缓存持续的最大时间(以秒为单位)。

跨域的场景:

image-20230331161106631

@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);
    }
}