Web入门-SpringBoot-4-请求响应

一、请求响应概述

  • 基本概念:在 JavaWeb 中,请求(Request)是客户端(如浏览器)向服务器发送的获取数据或服务的操作;响应(Response)是服务器对客户端请求的回应。

二、使用 postman 工具进行请求

  • 简介:一款强大的 API 测试工具,可用于模拟发送各种 HTTP 请求,方便开发者调试和测试 Web 服务。
  • 使用方法:安装 postman 后,可设置请求方法(如 GET、POST 等)、URL、请求头、请求参数等,然后发送请求查看服务器的响应结果,帮助理解请求响应的实际交互过程。

三、请求

1.简单参数

  • GET请求:参数在URL中以?param1=value1&param2=value2的形式传递。在Servlet中可以使用request.getParameter("param1")获取参数值。在Spring Boot中,可以直接通过方法参数接收简单参数,形参名与请求参数名一致时无需额外注解。如果需要指定参数名或设置默认值等,则可以使用@RequestParam注解。例如:

    java复制

    @GetMapping("/greet")
    public String greet(@RequestParam(defaultValue = "Guest") String name) {
        return "Hello, " + name;
    }
  • POST请求:如果是表单提交,也可以通过相同的方式获取参数。例如:

    @PostMapping("/postHello1")
    public String postHello1(@RequestParam("name") String name,
                             @RequestParam("age") Integer age) {
        return "name:" + name + "\nage:" + age;
    }

2.实体参数

  • 概念:当请求需要传递复杂的数据结构时,通常将这些数据封装成实体对象。例如,用户注册请求可能需要传递用户名、密码、年龄等信息,这些信息可以封装在User实体类中。

  • 处理方式:服务器端需要定义对应的实体类,然后通过Spring Boot提供的自动类型转换机制,将请求中的数据映射到实体对象中。例如:

    @PostMapping("/user")
    public String createUser(@RequestBody User user) {
        return "Created user: " + user.getName();
    }

    请求参数名与实体类属性名保持一致。如果传递的JSON数据是一个数组,也可以直接接收为数组或集合类型。例如:

    @PostMapping("/helloList")
    public String helloList(@RequestBody List<User> users) {
        String result = "";
        for (User user : users) {
            result += user.getName() + " " + user.getAge() + "\n";
        }
        return result;
    }

 

3.数组集合参数

  • 数组参数

    • 传递方式:在URL中通过重复参数名来传递,例如?ids=1&ids=2&ids=3;或者在请求体中以JSON数组格式传递。

    • 服务器端处理:使用数组接收多个请求参数。例如:

      @GetMapping("/users")
      public String getUsers(Integer[] ids) {
          return "User IDs: " + Arrays.toString(ids);
      }
  • 集合参数

    • 与数组的区别:集合参数相比数组更加灵活,可用于传递不同类型的对象集合。例如,订单详情请求可能包含多个商品信息的集合,每个商品信息又是一个包含商品ID、名称、价格等属性的对象。

    • 处理方法:通常需要借助JSON解析库将请求体中的JSON格式的集合数据解析为Java中的集合对象(如List、Set等),然后进行业务逻辑处理。例如:

    • @PostMapping("/postHello4")
      public String postHello4(@RequestParam List<User> users) {
          String result = "";
          for (User user : users) {
              result += user.getName() + " " + user.getAge() + "\n";
          }
          return result;
      }

4.日期参数

  • 传递问题:日期数据在传输过程中需要注意格式问题,因为不同地区和系统可能对日期格式的理解和处理方式不同。

  • 解决方案:客户端发送请求时,确保日期参数按照服务器端能够识别的格式进行传递。服务器端接收日期参数后,可能需要进行格式校验和转换,将其转换为Java中的Date对象或其他日期相关的类(如LocalDate、LocalDateTime等)进行处理。可以使用@DateTimeFormat注解来自定义日期格式。例如:

    @GetMapping("/date")
    public String handleDate(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date) {
        return "Date: " + date;

5.路径参数

  • 概念:将参数值嵌入到URL的路径部分,例如/user/123,其中123就是路径参数,表示用户的ID。这种方式在RESTful风格的API设计中较为常见,能够使URL更加简洁和语义化。

  • 服务器端处理:在Spring Boot中,可以通过在方法参数上添加@PathVariable注解来获取路径参数值。例如:

    java复制

    @GetMapping("/user/{id}")
    public String getUser(@PathVariable Long id) {
        return "User ID: " + id;
    }

    @PathVariable注解中的名称应与URL路径中的变量名保持一致。

四、响应

一、@RestController 注解

注解概述

  • @RestController是 Spring MVC 框架中的一个组合注解,它等效于同时使用@Controller和@ResponseBody注解。其主要作用是简化开发,让开发者能更便捷地构建出直接返回数据而非视图页面的控制器。

@Controller 注解详解

  • @Controller用于标识一个类是 Spring MVC 中的控制器,负责接收客户端请求,并将请求映射到相应的处理方法上。例如:
  • 在上述代码中,@Controller把MyController类标记为控制器,@RequestMapping("/hello")将hello方法映射到/hello这个 URL 路径,当客户端访问/hello时,hello方法被调用。通常,若没有@ResponseBody配合,方法返回值会被视图解析器当作视图页面的名称,去查找对应的模板文件(如 JSP、Thymeleaf 等)进行渲染,最终返回给客户端的是渲染后的页面。
    @Controller
    public class MyController {
        @RequestMapping("/hello")
        public String hello() {
            return "hello";
        }
    }

@ResponseBody 注解详解

  • @ResponseBody的关键功能是将方法的返回值直接作为 HTTP 响应的内容返回给客户端,跳过视图解析步骤。例如:
  • 这里,getUser方法返回一个User实体对象,由于加了@ResponseBody,Spring MVC 默认使用 Jackson(若配置正常)等工具将User对象转换为 JSON 格式,直接作为 HTTP 响应体内容发送给客户端,客户端收到的就是数据,而非指向某个视图的指令。
    @Controller
    public class MyController {
        @RequestMapping("/getUser")
        @ResponseBody
        public User getUser() {
            User user = new User();
            user.setName("张三");
            user.setAge(20);
            return user;
        }
    }

@RestController 的优势

  • 代码简洁性:避免在每个处理方法上都单独写@ResponseBody,使控制器类代码更加紧凑、易读。例如,若一个控制器中有多个返回数据的方法,使用@RestController后,代码量明显减少。
  • 语义明确性:清晰表明该控制器类的所有方法都专注于返回数据,让开发者一眼就能判断其用途,利于团队协作与代码维护。

五、统一响应结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值