锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. 在Spring Boot中处理HTTP请求【后端 5】

在Spring Boot中处理HTTP请求【后端 5】

0
  • 软件开发
  • 发布于 2024-08-17
  • 0 次阅读
黄健
黄健

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

在 Spring Boot 中处理 HTTP 请求

在 Web 开发中,处理 HTTP 请求和响应是构建任何应用程序的基础。Spring Boot 以其简化的配置和快速开发的能力,成为构建 RESTful Web 服务的首选框架之一。本文将围绕 Spring Boot 中的请求处理,从基础到进阶,详细介绍如何接收和处理不同类型的请求参数。

1. 使用 Postman 进行接口测试

在开发过程中,接口测试是必不可少的一环。Postman、Apipost 和 Apifox 等工具为我们提供了强大的接口测试能力,允许我们模拟各种 HTTP 请求,并验证服务端的响应。这些工具不仅支持 GET、POST 等基本请求类型,还支持 PUT、DELETE 等多种 HTTP 方法,是开发人员进行接口调试的得力助手。

2. 简单参数接收

原始方式获取请求参数

在 Spring Boot 中,我们可以通过在 Controller 方法的形参中声明HttpServletRequest对象来获取请求中的参数。这种方式虽然直接,但不够简洁,特别是在处理大量参数时。

@RestController  
public class RequestController {  
    @RequestMapping("/simpleParam")  
    public String simpleParam(HttpServletRequest hsr) {  
        String name = hsr.getParameter("name");  
        String ageStr = hsr.getParameter("age");  
        int age = Integer.parseInt(ageStr); // 注意:这里应该处理NumberFormatException  
        System.out.println(name + ":" + age);  
        return "OK";  
    }  
}
SpringBoot 中自动接收简单参数

Spring Boot 提供了更简洁的参数绑定方式。如果请求参数名与 Controller 方法形参变量名相同,Spring MVC 会自动将请求参数绑定到对应的方法形参上,并进行必要的类型转换。

@RequestParam 注解

当方法形参名称与请求参数名称不匹配时,可以使用@RequestParam注解来指定映射关系。此外,该注解的required属性默认是true,表示请求中必须包含该参数。

@RestController  
public class RequestController {  
    @RequestMapping("/simpleParam")  
    public String simpleParam(@RequestParam(name = "name", required = false) String username, @RequestParam(name = "age") int age) {  
        System.out.println(username + ":" + age);  
        return "OK";  
    }  
}

3. 实体参数

对于复杂的请求参数,我们可以创建一个 Java 对象作为实体参数。Spring MVC 会自动将请求中的参数绑定到这个对象的相应属性上。

public class User {  
    private String name;  
    private int age;  
    // 省略getter和setter方法  
}  
  
@RestController  
public class RequestController {  
    @RequestMapping("/simplePOJO")  
    public String simplePOJO(User user) {  
        System.out.println(user);  
        return "OK";  
    }  
}

请求示例(假设服务器运行在localhost:8080):

GET http://localhost:8080/simplePOJO?name=Tom&age=76

4. 数组参数

在 Spring MVC 中,处理数组参数非常直接。当你有一个请求包含多个同名参数时,Spring MVC 会自动将这些参数收集到一个数组中。这对于处理如多个 ID、多个标签等场景非常有用。

Controller 代码示例:

@RestController  
public class ArrayParameterController {  
  
    @RequestMapping("/users")  
    public String receiveUserIds(@RequestParam("id") int[] ids) {  
        StringBuilder sb = new StringBuilder();  
        for (int id : ids) {  
            sb.append(id).append(", ");  
        }  
        if (sb.length() > 0) {  
            sb.setLength(sb.length() - 2); // 移除最后一个逗号和空格  
        }  
        return "Received IDs: " + sb.toString();  
    }  
}

请求示例:

GET http://localhost:8080/users?id=1&id=2&id=3

5. 集合参数

与数组参数类似,Spring MVC 也支持将请求中的多个参数绑定到集合(如 List、Set)中。这在处理动态数量的参数时非常有用,尤其是当你不确定将有多少个参数被发送时。

Controller 代码示例:

@RestController  
public class CollectionParameterController {  
  
    @RequestMapping("/items")  
    public String receiveItemNames(@RequestParam("name") List<String> names) {  
        return "Received Names: " + names;  
    }  
}

请求示例:

GET http://localhost:8080/items?name=Apple&name=Banana&name=Cherry

6. 日期参数

对于日期类型的参数,Spring MVC 提供了@DateTimeFormat注解来指定日期的格式。这确保了无论客户端以什么格式发送日期字符串,Spring MVC 都能正确解析它。

Controller 代码示例:

@RestController  
public class DateParameterController {  
  
    @RequestMapping("/appointment")  
    public String bookAppointment(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {  
        return "Appointment booked for: " + date.toString();  
    }  
}

请求示例:

GET http://localhost:8080/appointment?date=2023-04-01

7. JSON 参数

当需要接收 JSON 格式的请求体时,通常会在 Controller 方法的形参中声明一个与 JSON 结构相对应的 Java 对象,并使用@RequestBody注解来标记这个参数。Spring MVC 会使用 HTTP 消息转换器(如 Jackson)自动将请求体中的 JSON 字符串转换为 Java 对象。

Controller 代码示例:

@RestController  
public class JsonParameterController {  
  
    static class User {  
        private String name;  
        private int age;  
        // 省略getter和setter方法  
    }  
  
    @PostMapping("/user")  
    public String createUser(@RequestBody User user) {  
        return "User created: " + user.getName() + ", Age: " + user.getAge();  
    }  
}

请求示例(使用 Postman 或 cURL):

POST http://localhost:8080/user  
Content-Type: application/json  
  
{  
    "name": "John Doe",  
    "age": 30  
}

8. 路径参数

路径参数是 URL 路径中的一部分,用于表示资源的唯一标识符。在 Spring MVC 中,可以使用@PathVariable注解来捕获这些 URL 模板变量作为方法的参数。

Controller 代码示例(已在问题描述中给出):

@RestController  
public class PathVariableController {  
  
    @RequestMapping("/user/{id}")  
    public String getUserById(@PathVariable("id") String id) {  
        // 处理逻辑  
        return "User ID: " + id;  
    }  
}

请求示例:

GET http://localhost:8080/user/123
标签: #Spring Boot 173 #软件开发 1171 #JAVA 991
相关文章

万字:支付“核心系统”详解 2024-11-02 15:33

专栏作者:隐墨星辰 \| 主编:陈天宇宙 这篇文章也尝试化繁为简,探寻支付系统的本质,讲清楚在线支付系统最核心的一些概念和设计理念。 虽然支付行业已经过了风头最劲的时光,但跨境支付仍然在蓬勃发展,每年依然有很多新人进入这个行业,这篇文章尝试为这些刚入行的新人提供一点帮助。 文章只介绍一些支付行业十几

资深支付架构师视角:实战从问题定义到代码落地的完整套路 2024-11-02 15:33

前言 今天从一个实际案例入手,介绍站在架构师的角度,如何识别并定义问题,提炼需求,技术方案选型,再到详细设计,最后利用AI的能力协助写出核心的代码,验证与调优。 解决问题存在一定的模式,也可以称之为框架,总结出自己的思考和解题框架,以后再碰到同类型的问题就可以如庖丁解牛一样容易。 很多年前,我写代码

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

设计模式第16讲——迭代器模式(Iterator) 2024-10-08 11:24

一、什么是迭代器模式 迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不是暴露集合内部的表示方式。简单地说,就是将遍历集合的责任封装到一个单独的对象中,我们可以按照特定的方式访问集合中的元素。 二、角色组成 抽象迭代器(Iterator):定义了遍历聚合对象所需的方法

vue2路由和vue3路由区别及原理 2024-10-08 11:24

一、Vue2 与 Vue3 路由的区别 1. 创建路由实例方式的不同 Vue 2 中,通过 Vue.use() 注册路由插件,并通过 new VueRouter() 来创建路由实例。 import Vue from 'vue';import VueRouter from 'vue-router';i

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.