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


    在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
    
  • 相关阅读:
    计算机专业毕业设计项目推荐04-物业管理系统(SpringBoot+原生Js+Mysql)
    Since Maven 3.8.1 http repositories are blocked
    ip_vs 原理解析 (四)hook 后的开始 NF_INET_LOCAL_OUT
    SSM+家装管理系统 毕业设计-附源码191452
    95 后阿里 P7 晒出工资单:狠补了这些个技术栈,真的香啊
    python/pygame 挑战魂斗罗 笔记(三)
    【编程题】【Scratch四级】2021.06 计算三角形面积
    cuda cache相关知识总结
    [附源码]java毕业设计高校资源共享平台
    FreeRtos 任务切换深入分析
  • 原文地址:https://blog.csdn.net/delepaste/article/details/141095172