Spring MVC 中的常见注解的用法(中)

简介: Spring MVC 中的常见注解的用法

2. 获取参数


获取单个参数


学习 servlet 时获取参数的写法:


@RestController
@RequestMapping("/user")
public class UserController {
    //传统写法获取请求中的参数
    @RequestMapping("/getname") //这里不建议使用大小写, 可以用下划线来区分
    public String getName(HttpServletRequest request) {
        return "Name : " + request.getParameter("name");
    }
}


通过 url 传递参数:

e36a21e56f424062ae81de4c90dd7ab3.png


通过注解获取:


@RestController
@RequestMapping("/user")
public class UserController {
  //直接获取 url 中的参数
  //当该路由被触发后,执行到方法时
  //就会对 name 进行匹配,直接对 name 进行赋值
    @RequestMapping("/getname2")
    public String getName2(String name) {
        return "Name : " + name;
    }
}

a1653989e4e643f7a8734585831678f2.png


获取多个参数


其实获取多个参数和获取单个参数差不多:


@RestController
@RequestMapping("/user")
public class UserController {
  //在传参时,注意参数的命名与要获取的参数名一致
    @RequestMapping("/getname3")
    public String getName3(String name, Integer age) {
        return "Name : " + name + "age : " + age;
    }
}


不传参数就默认为 null

dd696c4ca4ac49ff9eda7a3dfc5eef44.png

5f38eca239ed156116b0f963b80b2ca2_04ae034d189044a58a354f5e7dbf8593.png

传递对象


顾名思义,就是将参数当做一个对象的部分属性来接收,在接收时我们新建一个 model 层,来存放所需要的对象:

36714085f9d9488b895034b10b13290e.png


@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/add")
    public User add(User user) {
        return user;  //将得到的对象返回回去
    }
}


@Data 注解是个组合注解,它等于:@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor

添加了它就不需要我们自己写 Getter 和 Setter 方法了,减少重复工作。


f358a14ba15f4487ac2c15e0d2931854.png

当后端进行接收数据时,就会将参数和 user 里的属性进行对比,发现属性名称与参数的 key 相同就会进行赋值。


当对象返回前端时,因为前端是用 json 来表示对象的,所以返回的对象就转化为 json 格式 :

3298eed355c05e1871760c6e1bbc196b_a2a0701bbcaf4c6182a46a4922e19384.png


表单传参


其实表单传参和 url 传参区别就是传递参数的位置不一样,对于后端来说都一样,我们可以用 Postman 来构造请求:

11f58f194277fbdde7918e1d26e62c35_fd53964c73b94eb2b543364351f2454d.png


后端参数重命名


有时候前端传递的 key 你觉得不合理,想改个顺眼的名字,就可以对传递过来的参数重命名,当然前端的参数是不变的。(注意: 对象不能重命名)


@RestController
@RequestMapping("/user")
public class UserController {
  //将前端参数 y 改为 name,并由 name 接收
    @RequestMapping("/name")
    public String name(@RequestParam("y") String name) {
        return name;
    }
}


025afa2b018c764eac0d19fe3a10fc09_9936b4d184c94a5291e4a254ffc26d2f.png

这里就有一个问题,如果我不传这个 y 就会报错:

83b16120127d9b414d478ae0f1a25788_255997db4708426998d387193a4baba9.png

在 @RequestParam 中,参数默认是必传的:


db4f782fe9c3e45ac6b851750d19443b_7367f31f06e64159a7593eb037878758.png

如果我们需求是参数非必传则可以进行如下修改:


@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/name")
    public String name(@RequestParam(value = "y",required = false) String name) {
        return name;
    }
}


这样就不会报错了:

b5f9d7f322064bcd32eb2dbc8e8a2dfb_9ce0327b249a4211a5614d4f827e85b2.png


@RequestBody 接收 JSON 对象


@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/get_json")
    public User getJson(@RequestBody User user) {
        return user;
    }
}


使用 Postman 构造对象并发送 :


daec77211d6c143b408dbec1bef95b9a_905ea76c8b9f4469a0ad9c868c234dd2.png


@PathVariable 获取 URL 中的参数


@RestController
@RequestMapping("/user")
public class UserController {
  //{aid} 中的 aid 是用来接收参数的
    @RequestMapping("/get_url/{aid}")
    //下面的 "aid" 是将参数名为 aid 的参数赋值给后面的 aid
    //这里两个 aid 名字相同,可以省略参数名("aid")不写
    public Integer getUrl(@PathVariable("aid") Integer aid) {
        return aid;
    }
}


9c4ca0d33f2d421e6562f3d435e8eec2_69c6d8196e1d420c8147231073191cb3.png


当然了, 还可以传递多个参数 :


@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/get_url2/{aid}/{name}")
    public String getUrl2(@PathVariable() Integer aid, @PathVariable String name) {
        return "aid: " + aid + " name: " + name;
    }
}

2d3791ab974f5c265a64f7d6a900846a_1103055be3954696ab44072573fa5a73.png


相关文章
|
10月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
10月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
795 2
|
11月前
|
缓存 监控 Java
SpringBoot @Scheduled 注解详解
使用`@Scheduled`注解实现方法周期性执行,支持固定间隔、延迟或Cron表达式触发,基于Spring Task,适用于日志清理、数据同步等定时任务场景。需启用`@EnableScheduling`,注意线程阻塞与分布式重复问题,推荐结合`@Async`异步处理,提升任务调度效率。
1575 128
|
11月前
|
XML Java 数据格式
常用SpringBoot注解汇总与用法说明
这些注解的使用和组合是Spring Boot快速开发和微服务实现的基础,通过它们,可以有效地指导Spring容器进行类发现、自动装配、配置、代理和管理等核心功能。开发者应当根据项目实际需求,运用这些注解来优化代码结构和服务逻辑。
688 12
|
11月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
589 0
探索Spring Boot的@Conditional注解的上下文配置
|
11月前
|
智能设计 Java 测试技术
Spring中最大化@Lazy注解,实现资源高效利用
本文深入探讨了 Spring 框架中的 `@Lazy` 注解,介绍了其在资源管理和性能优化中的作用。通过延迟初始化 Bean,`@Lazy` 可显著提升应用启动速度,合理利用系统资源,并增强对 Bean 生命周期的控制。文章还分析了 `@Lazy` 的工作机制、使用场景、最佳实践以及常见陷阱与解决方案,帮助开发者更高效地构建可扩展、高性能的 Spring 应用程序。
415 0
Spring中最大化@Lazy注解,实现资源高效利用
|
11月前
|
Java 测试技术 数据库
使用Spring的@Retryable注解进行自动重试
在现代软件开发中,容错性和弹性至关重要。Spring框架提供的`@Retryable`注解为处理瞬时故障提供了一种声明式、可配置的重试机制,使开发者能够以简洁的方式增强应用的自我恢复能力。本文深入解析了`@Retryable`的使用方法及其参数配置,并结合`@Recover`实现失败回退策略,帮助构建更健壮、可靠的应用程序。
1141 1
使用Spring的@Retryable注解进行自动重试
|
11月前
|
Java 测试技术 编译器
@GrpcService使用注解在 Spring Boot 中开始使用 gRPC
本文介绍了如何在Spring Boot应用中集成gRPC框架,使用`@GrpcService`注解实现高效、可扩展的服务间通信。内容涵盖gRPC与Protocol Buffers的原理、环境配置、服务定义与实现、测试方法等,帮助开发者快速构建高性能的微服务系统。
1888 0
|
11月前
|
XML 安全 Java
使用 Spring 的 @Aspect 和 @Pointcut 注解简化面向方面的编程 (AOP)
面向方面编程(AOP)通过分离横切关注点,如日志、安全和事务,提升代码模块化与可维护性。Spring 提供了对 AOP 的强大支持,核心注解 `@Aspect` 和 `@Pointcut` 使得定义切面与切入点变得简洁直观。`@Aspect` 标记切面类,集中处理通用逻辑;`@Pointcut` 则通过表达式定义通知的应用位置,提高代码可读性与复用性。二者结合,使开发者能清晰划分业务逻辑与辅助功能,简化维护并提升系统灵活性。Spring AOP 借助代理机制实现运行时织入,与 Spring 容器无缝集成,支持依赖注入与声明式配置,是构建清晰、高内聚应用的理想选择。
890 0
|
11月前
|
安全 IDE Java
Spring 的@FieldDefaults和@Data:Lombok 注解以实现更简洁的代码
本文介绍了如何在 Spring 应用程序中使用 Project Lombok 的 `@Data` 和 `@FieldDefaults` 注解来减少样板代码,提升代码可读性和可维护性,并探讨了其适用场景与限制。
361 0
Spring 的@FieldDefaults和@Data:Lombok 注解以实现更简洁的代码