Controller 接口支持多达26种参数解析方式

文摘   2024-11-02 10:00   新疆  

最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)。

环境:SpringBoot3.2.5



1. 简介

在如今的项目开发中,RESTful API 成为了服务端与客户端交互的标准方式。Spring MVC 作为 Spring 框架的核心模块之一,提供了强大的功能来处理 HTTP 请求。本文将详细介绍在 Spring Boot 控制器Controller中如何优雅地接收各种类型的请求参数,包括基本数据类型、复合对象、文件上传以及路径变量等等,以满足不同业务场景的需求。

我们将通过一系列具体的示例演示如何在控制器方法中使用如 @RequestParam@PathVariable@RequestBody@MatrixVariable等注解来接收请求的不同参数形式,当然还包括不使用注解的情况下如何处理参数。

通过本文的学习,读者将能够掌握 Controller 接口在处理多样化请求参数方面的最佳实践,从而更好地设计和实现 RESTful API,提高应用的健壮性和用户体验。无论是初学者还是有一定经验的开发者,都能从中获得有价值的信息和技术指导。

2. 实战案例

2.1 基本数据类型

@GetMapping("/p1")public int p1(int id) {  return id ;}

这也可以是其它的基本数据类型;但是,当我们没有传id参数时,这将抛出异常,如下:

意思是:参数id可以没有,但由于它被声明为原始类型,因此无法转换为 null 值。建议将其声明为其对应的对象包装类型。

所以,这里我们可以将参数类型改成对应的包装类Integer(注意返回值也要改)。

2.2 对象类型

@GetMapping("/user")public User save(User user) {  return user ;}

不要怀疑是不是漏了@RequestBody注解?没有,Spring MVC支持将请求的各个参数绑定到对象中的属性中,如下示例:

而且,这种形式的对象参数也可以进行基于注解的参数验证,如下:

public class User {
private Long id ; @NotEmpty(message = "姓名必须填写") private String name ; private Integer age ;  // getters, setters}

接口添加注解

@GetMapping("/user")public User save(@Valid User user)

请求该接口,不填写name属性

2.3 Map参数

@GetMapping("")public Map<String, Object> save(  @RequestParam Map<String, Object> params) {  return params ;}

注意:你希望接收Map类型的参数,那么就必须添加 @RequestParam 注解。

这里并不会对数据类型进行转换,一律按照字符串处理。

2.4 List参数

@GetMapping("")public List<Long> save(@RequestParam List<Long> ids) {  return ids ;}

通过如下方式传值,参数名都一样即可

参数值也可以是以 "," 分割的参数。

Spring 内置了非常多的类型转换器,只要有对应的转换器它都能够进行处理。

2.5 日期类型

@GetMapping("")public Date date(  @DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {  return date ;}

这里我们必须添加 @DateTimeFormat 注解,并且设置pattern值,否则将抛出无法转换的错误。

日期的类型还可以是java8中的类型,如下:

@GetMapping("/d2")public LocalDate date2(LocalDate date) {  return date ;}

这时候,我们并不需要添加任何其它的注解也能正常的工作,如下示例:

Spring全家桶实战案例源码
spring, springboot, springcloud 案例开发详解
 最新文章