Spring MVC常用注解

本文介绍了Spring MVC中常用的注解,包括@Controller、@RequestMapping、@RequestParam、@PathVariable、@RequestBody、@ResponseBody、@RequestHeader、@CookieValue、@ModelAttribute和@SessionAttributes。@Controller用于标记处理请求的类,@RequestMapping映射请求URL,@RequestParam获取请求参数,@PathVariable从URL获取动态参数,@RequestBody和@ResponseBody用于处理请求体和响应体,@RequestHeader和@CookieValue获取请求头和Cookie值,@ModelAttribute用于在方法间共享Model数据,@SessionAttributes则用于在多个请求间传递参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 @Controller

在SpringMVC中,@Controller用于标记一个类,将其注册到Spring上下文, 负责处理由DispatcherServlet分发的请求,并将处理结果封装成一个Model返回给View进行展示。
@Controller注解需要被Spring所认识,还需要在配置文件中增加以下配置:

// 通过该配置,Spring会扫描com.spring.controller包下的所有注解
<context:component-scan base-package="com.spring.controller"/>

2 @RequestMapping

@RequestMapping是将请求url映射到处理逻辑上,可用于类或方法上,该注解有六个属性:

  • value:指定请求的url;
  • method:指定请求的method类型, GET、POST等;
  • consumes:指定处理请求的提交内容类型(Content-Type),如application/json;
  • produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
  • params: 指定request中必须包含某些参数值是,才让该方法处理;
  • headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求

@RequestMapping(“/mvc/?/getView”) 支持多种匹配符:

  • ?:匹配文件名的一个字符,
  • *:匹配文件名的所有字符
  • **:匹配多层路径
@Controller //控制器,类似于struts的Action
@RequestMapping("/mvc/*") // 父request请求url
public class FirstController {
    @RequestMapping("/getView")
    public String getView(){
        return "home";
    }

@RequestMapping 标记的处理器方法,可以直接在方法上给定HttpServlet 对象的参数申明(主要包括HttpServletRequest 、HttpServletResponse 和HttpSession),然后在方法体里面直接使用。

3 @RequestParam

@RequestParam 主要功能是辅助控制层获取到请求中的业务参数,其形式为public String getName(@RequestParam("id") String userId),另外,@RequestParam能够将请求中的参数转换成函数定义中的形参形式。

@RequestParam 通过Request.getParameter() 获取到的String可直接转换为简单类型,所能处理的Content-Type 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST

4 @PathVariable

@PathVariable 将请求URL中的模板变量映射到方法参数上,即具备从URL中获取动态参数的能力,参数名称不一致时可参看如下方式:

@RequestMapping(value = "/getAddressByName/{name}", method = RequestMethod.POST)
@ResponseBody
public String getAddressByName(@PathVariable("name") String userName){
    if (userName.equalsIgnoreCase("zhangsan")) {
        return "shanghai";
    } else {
        return "anhui";
    }
}

5 @RequestBody、@ResponseBody

@RequestBody 功能是读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,将数据转换到形参指定的类型上,与@RequestParam不同,该注解处理的是 非application/x-www-form-urlencoded编码的内容

@ResponseBody 将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

@RequestMapping("/setPerson")
@ResponseBody
public Person setPerson(@RequestBody Person person) {
    System.out.println(JSON.toJSONString(person));
    person.setName("zhangsan");
    person.setSex("female");
    person.setAddress("上海");
    return person;
}

6 @RequestHeader、@CookieValue

@RequestHeader 可以将请求Request中的header部分绑定到方法形参上;
@CookieValue 可以把Request header中关于cookie的值绑定到方法的参数上;

@RequestMapping(value = "/getHeaderAndCookie", method = RequestMethod.POST)
@ResponseBody
public String getHeaderAndCookie(@RequestHeader("Host") String header, @CookieValue("name") String cookie) {
    return "header:" + header + ", cookie:" + cookie;
}

7 @ModelAttribute

SpringMVC 使用@ModelAttribute 在不同方法之间通过Model来共享数据,主要有两种使用方式,一种是标注在方法上,一种是标注在 Controller 方法参数上:

  • @ModelAttribute作用在方法上时,表明该方法会向Model添加一个属性,在当前Controller各方法之间共享,并且会在该Controller的所有@RequestMapping标注的方法执行前调用;
  • @ModelAttribute作用在方法参数上时,表明该参数可以在Model中检索到,并提取属性值注入到自定义的方法形参上;

注:@ModelAttribute标记的方法会在每个@RequestMapping标记的方法执行前调用,因此需要谨慎使用。

@Controller
public class MyController {

    @ModelAttribute("stringValue")
    public String setName(){
        System.out.println("执行 setName 方法");
        return "zhangsan";
    }

    @ModelAttribute("userAge")
    public int setAge(){
        System.out.println("执行 setAge 方法");
        return 10;
    }

    @RequestMapping(value = "/getAge", method = RequestMethod.GET)
    public void getAge(@ModelAttribute("stringValue") String name, @ModelAttribute("userAge") int age){
        System.out.println("name:" + name + ", age:" + age);
    }
}

执行结果为:

执行 setName 方法
执行 setAge 方法
name:zhangsan, age:10

8 @SessionAttributes

@SessionAttributes 只能标记在Controller类上,指明将Model中的哪些属性是放到session中,可用于在多个请求之间传递参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值