• 在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
    
  • 相关阅读:
    都说测试行业饱和了,为什么我们公司给初级测试开到了12K?
    odoo 开发入门教程系列-约束(Constraints)
    jenkins部署springboot项目、制作Dockerfile启动在docker容器中
    SkiaSharp 之 WPF 自绘 五环弹动球(案例版)
    nginx的安装与nginx降权+匹配php
    【Webpack】webpack的基础使用详细总结 上(建议收藏)
    C++征途 --- Vector容器
    怎么将webp格式转换成jpg?详细步骤
    nodejs毕业设计源码基于nodejs的拼车网站
    zookeeper基础学习之六: zookeeper java客户端curator
  • 原文地址:https://blog.csdn.net/delepaste/article/details/141095172