Bootstrap

Springboot请求响应练习

        Springboot对于不同的请求进行响应

package com.wzb.ResponseExercise20240919;


import com.wzb.ResponseExercise20240919.Result.Result;
import com.wzb.ResponseExercise20240919.pojo.User;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;


// 添加RestController注解,表示此类中所有方法的返回值都作为浏览器的响应数据

@RestController
public class ResponseExercise {
    // Controller方法中,已经设置了响应浏览器请求的数据
    // Controller方法中的return的结果,是通过@ResponseBody注解响应给浏览器的

    // @ResponseBody注解
    // 1.类型:方法注解,类注解;可以为类或者方法进行注解
    // 2.位置:书写在@Controller方法或者类上
    // 3.作用:将方法返回值直接响应给浏览器(如果方法返回值是实体对象/集合),那么将会转换为json格式后再响应给浏览器

    // 但是在一般的书写中,只是在类上添加了@RestController的注解,方法添加了@RequestMapping注解,并没有直接使用@RespondBody注解
    // 是因为@RestContorller是一个组合注解,是@Controller和@ResponseBody的组合,所以说不需要直接使用@RespondBody就可以响应浏览器

    // 可以理解为添加了@RestController注解就相当于添加了@ResponseBody注解

    // 类上有@RestController注解或者@ResponseBody注解时,表示当前类下所有的方法的返回值都作为浏览器的响应参数


    /* 无参数的请求 */
    @RequestMapping("/Hello")
    public Result function() {
        System.out.println("hello world");
        return Result.success("Hello World");
    }

    /* 请求普通参数 */
    @RequestMapping("/simpleParam")
    public Result simpleParam(String name) {
        System.out.println("I am " + name);
        return Result.success(("I am " + name));
    }

    /* 请求普通参数的复杂写法 */
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request) {
//        String name = request.getParameter("name");
//        int age = Integer.parseInt(request.getParameter("age"));
//        System.out.println(name + ": " + age);
//        return (name + ": " + age);
//    }

    /* 请求实体对象 */
    /* 若响应的是实体对象,那么前端将会以json格式展示出来 */
    @RequestMapping("/simplePojo")
    public Result simplePojo (User user) {
        System.out.println(user);
        return Result.success(user);
    }

    /* 请求数组 */
    @RequestMapping("/simpleArray")
    public Result simpleArray(String[] hobby) {
        System.out.println(Arrays.toString(hobby));
        return Result.success(hobby);
    }

    /* 请求集合 */
    /* 因为默认是响应数组,所以说想要响应集合需要用@RequestParam注解 */
    @RequestMapping("/simpleList")
    public Result simpleList(@RequestParam List<String> hobby) {
        System.out.println(hobby);
        return Result.success(hobby);
    }

    /* 请求时间日期参数 */
    @RequestMapping("/updateTime")
    public Result dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime) {
        System.out.println("现在的时间是: " + updateTime);
        return Result.success(updateTime);
    }

    /* 请求json参数 */
    @RequestMapping("/jsonParam")
    public Result jsonParam(@RequestBody User user) {
        System.out.println(user);
        return Result.success(user);
    }
}

        User类

package com.wzb.ResponseExercise20240919.pojo;

public class User {
    private String name;
    private int age;
    private Address address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}

        Address类

package com.wzb.ResponseExercise20240919.pojo;

public class Address {
    private String province;
    private String city;

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }
}

        统一返回结果Result

package com.wzb.ResponseExercise20240919.Result;

public class
Result {
    private Integer code;  // 响应状态码:1代表成功;0代表失败
    private String message;  // 状态码信息 描述的字符串
    private Object data;  // 返回的数据,因为是返回的数据千奇百怪,所以说用顶级父类Object当作数据的类型

    public Result() {}

    public Result(Integer code, String message, Object data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    // 为了提高效率,为成功响应和失败响应分别封装静态方法

    // 成功响应(不需要给前端返回数据)
    public static Result success() {
        return new Result(1, "success", null);
    }

    // 成功响应(需要给前端返回数据)
    public static Result success(Object data) {
        return new Result(1, "success", data);
    }

    // 失败响应
    public static Result error(String message) {
        return new Result(0, "Fail", null);
    }
}

        统一返回测试 

 

package com.wzb.ResponseExercise20240919;

import com.wzb.ResponseExercise20240919.Result.Result;
import com.wzb.ResponseExercise20240919.pojo.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ResponseTogetherExercise {
    /* 响应的值多种多样,没有规范;不便于前后端分离开发:前端若拿到响应的数据,没有统一的规范,那么需要对不同的数据
       进行不同的解析,成本高、效率低、维护困难 */

    /* 所以说一般在开发中,定义一个统一的返回结果,所有请求都返回这个类型的结果,便于开发 */

    /* 这个统一的返回结果应该包含:
       1.响应状态码:当前的请求的成功还剩失败
       2.状态码信息:给页面的提示信息
       3.返回的数据:给前端响应的数据(字符串、对象、集合;所以说要用Object定义数据类型)*/

    /* 有了统一的返回结果Result之后,就可以对Controller进行改造 */

    @RequestMapping("/simplePojoTogether")
    public Result simplePojo(User user) {
        System.out.println(user);
        /* 能够走到这一步,那么说明成功响应了 */
        return Result.success(user);
    }

}

         

 

 

;