常用注解(7)

本文详细介绍了SpringMVC中各种参数处理方式,包括RequestParam、RequestBody、PathVariable、RequestHeader、CookieValue、ModelAttribute及SessionAttribute的使用场景和属性说明。

目录

一.RequestParam把请求中指定名称的参数给控制器中的形参赋值

二.RequestBody获取请求体内容

三.PathVariable绑定url中的占位符

四.RequestHeader获取请求消息头

五.CookieValue指定cookie名称的值传入控制器方法参数

六.ModelAttribute指定当前方法在控制器方法之前执行、获取指定的数据给参数赋值

七.SessionAttribute多个执行控制器方法间的参数共享


一.RequestParam把请求中指定名称的参数给控制器中的形参赋值

  • 作用:把请求中指定名称的参数给控制器中的形参赋值。
  • 属性:
    • value和name:请求参数中的名称
    • required:请求参数中是否必须提供此参数。默认值:true。表示必须提供,如果不提供将报错。
  • 使用示例:
    • name=”name“  name字符串表示请求参数的字段名称。

二.RequestBody获取请求体内容

  • 作用:用于获取请求体内容。直接使用得到是key=value&key=value...结构的数据(get不适用,get没有请求体)
  • 属性
    • requird:是否必须有请求体。默认值是:true。当取值为true时,get请求方式会报错。如果取值为false,get请求得到是null。
  • 示例

三.PathVariable绑定url中的占位符

  • 作用:
    • 绑定url中的占位符。例如:请求url中/delete/{id},这个{id}就是url占位符。
    • url支持占位符是spring3.0之后加入的。是springmvc支持rest风格URL的一个重要标志。
  • 属性:
    • value:用于指定url中占位符名称。
    • required:是否必须提供占位符。
  • REST风格URL
    • restful的优点:
      • 结构清晰、符合标准、易于理解、扩展方便。
    • restful的简单使用介绍
      • 他会根据请求方式在访问同一url情况下访问不同后台方法
      • 比如
        • /user/1 GET方式        访问findByid方法
          /user/1 DELETE方式  访问Deleteid方法
          /user/1 PUT方式         访问updateid方法 
          /user/1 POST方式      访问saveid方法
  • 示例:
    • <a href="testPathVariable/10"/>
    • 此时id的值已经被赋值为sid的值也就是传入的url中10的值

四.RequestHeader获取请求消息头

  • 作用:
    • 获取请求消息头
  • 属性:
    • value:提供消息头名称
    • required:是否必须有此消息头
  • 实际开发不怎么用
  • 示例:
    • 设置需要获取的请求头名称。

五.CookieValue指定cookie名称的值传入控制器方法参数

  • 作用:
    • 用于把指定cookie名称的值传入控制器方法参数
  • 属性:
    • value:指定cookie的名称
    • required:是否必须有此cookie
  • 示例
    • JSESSIONID是session的key所以每个浏览器都是有的

六.ModelAttribute指定当前方法在控制器方法之前执行、获取指定的数据给参数赋值

  • 作用:
    • 用于修饰方法和参数
    • 修饰在方法上:
      • 当前方法在控制器方法之前执行,方法可有返回值,也可没有。
    • 修饰在参数上:获取指定的数据给参数赋值。
  • 属性:
    • value:用于获取数据的key。key可以是pojo属性名称,也可以是map结构的key。
  • 应用场景:
    • 当表单提交的数据缺少值,可以使用此方式将值先从数据库获取。
  • 示例:
    • 1.修饰有返回值的方法,并赋值
    • 2.基于map修饰没有返回值的方法,在参数上修饰属性赋值

七.SessionAttribute多个执行控制器方法间的参数共享

  • 作用:
    • 用于多个执行控制器方法间的参数共享
  • 属性:
    • value:用于制定存入的属性名称
    • type:用于制定存入的数据类型
  • 扩展:
    • 搜索Model接口它有个ExtendeModelMap实现类,该实现类继承了ModelMap,ModelMap又继承了LinkedHashMap<String,Object>,该表示Model存储的数据是map集合
  • 示例:
    • 1.存入数据到request
    • 2.在类上修饰SessionAttributes将该数据存储到session中
    • 3.通过ModelMap获取session中的值
    • 4.清楚session中的值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

### 常用注解列表及应用场景 #### 1. **Spring 框架中的常用注解** Spring 提供了许多注解来简化开发过程并增强代码的灵活性。以下是部分常见注解及其用途: - `@Component` 这是一个通用组件定义注解,用于标记类作为 Spring 容器管理的一个 Bean[^3]。 - `@Service` 特定于服务层组件,通常用于业务逻辑处理的服务类中。 - `@Controller` 主要应用于控制器层,负责接收 HTTP 请求并将请求映射到相应的处理器方法。 - `@RestController` 结合了 `@Controller` 和 `@ResponseBody` 注解的功能,适用于 RESTful 风格的 Web 应用程序开发。 - `@Autowired` 自动装配依赖项,通过类型匹配或名称匹配的方式注入所需的对象实例。 - `@Qualifier` 当存在多个相同类型的 Bean 时,可以通过该注解指定具体的 Bean 名称进行注入。 - `@Value` 从配置文件或其他资源加载属性值,并将其赋给字段、构造函数参数或方法参数。 - `@PostConstruct` / `@PreDestroy` 分别标注初始化和销毁生命周期的方法,在 Bean 创建完成后执行特定操作或者在 Bean 销毁前清理资源。 --- #### 2. **Spring AOP 中的相关注解** 面向切面编程(AOP)允许开发者分离横切关注点,例如日志记录、事务管理和安全性控制等功能。以下是一些常见的 AOP 注解: - `@Aspect` 标记一个类为切面类,表示它包含了切入点和通知逻辑[^1]。 - `@Before` 在目标方法调用之前执行的通知逻辑。 - `@AfterReturning` 在目标方法成功返回之后执行的操作。 - `@Around` 包裹目标方法的执行流程,可以在方法前后自定义行为。 - `@Pointcut` 定义切入点表达式,描述哪些连接点会被拦截。 --- #### 3. **Java 函数式接口相关注解** 随着 Java 对 Lambda 表达式的引入,函数式接口成为一种重要的设计模式。下面介绍了一个典型例子以及其作用场景: - `@FunctionalInterface` 标识某个接口为函数式接口,即只包含单一抽象方法的接口。这有助于编译器验证接口是否符合函数式接口的要求,并支持更简洁的语法形式——Lambda 表达式[^4]。 ```java @FunctionalInterface public interface MyFunctionalInterface { void doSomething(); } ``` 上述代码片段展示了如何声明一个简单的函数式接口,并可通过如下方式使用 Lambda 实现具体功能: ```java MyFunctionalInterface myFunc = () -> System.out.println("Doing something..."); myFunc.doSomething(); ``` --- #### 4. **Web 开发领域内的注解** 对于现代 Web 应用而言,HTTP 协议交互频繁发生,因此掌握与之相关的注解尤为重要: - `@RequestMapping` 映射 URL 路径至对应的 Controller 方法上,支持多种 HTTP 动词如 GET, POST 等[^5]。 - `@GetMapping`, `@PostMapping`, `@PutMapping`, `@DeleteMapping` 更加语义化的替代方案分别对应不同的 HTTP 请求动作。 - `@RequestParam` 绑定查询字符串参数或表单数据到方法参数上。 - `@PathVariable` 抽取路径变量绑定到方法参数中,常用于 REST API 设计。 - `@RequestBody` 将传入 JSON/XML 数据反序列化成 Java 对象传递给方法参数。 - `@ResponseBody` 返回的数据会自动转换为响应体内容发送回客户端。 --- #### 5. **其他重要注解** 除了以上分类外还有一些跨框架适用的基础注解值得提及: - `@Override` 显示表明当前方法重写了父类同名方法,帮助提高代码可读性和减少错误风险[^2]。 - `@Deprecated` 标明某些过时特性不再推荐继续使用,可能在未来版本被移除。 - `@SuppressWarnings` 关闭特定警告提示信息以便保持源码整洁无冗余提醒。 --- ### 示例代码展示 以下给出一段综合运用若干前述提到过的注解的实际案例演示: ```java import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Autowired; @Service public class UserService { private final UserRepository userRepository; @Autowired public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public User findUserById(@RequestParam Long id) { return userRepository.findById(id).orElse(null); } } ``` 在此段代码里可以看到 `@Service`、`@Autowired` 及 `@RequestParam` 的实际应用情况。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值