请求 响应

在web的前后端分离开发过程中,前端发送请求给后端,后端接收请求,响应数据给前端

请求

前端发送数据进行请求

简单参数

原始方式

在原始的web程序中,获取请求参数,需要通过HttpServletRequest 对象手动获取。

代码样例:

    //原始方式
    @RequestMapping("/simpleParam")
    public String simpleParam(HttpServletRequest request){
        //获取请求参数
        String name=request.getParameter("name");
        String ageStr=request.getParameter("age");

        int age=Integer.parseInt(ageStr);
        System.out.println(name+":"+age);
        return "OK";
    }

前端测试发送的请求:

SpringBoot方式

简单参数:参数名与形参变量名相同,定义形参即可接收参数。

    //方式1
    @RequestMapping("/simpleParam")
    public String simpleParam(String name,Integer age ){
        System.out.println(name+":"+age);
        return "OK";
    }

简单参数: 如果方法形参名称与请求参数名称不匹配,可以使用 @RequestParam 完成映射。

    //方式2
    @RequestMapping("/simpleParam")
    //这里设置name不是必须传入参数
    public String simpleParam(@RequestParam(name="name" ,required = false) String username, Integer age ){
        System.out.println(username+":"+age);
        return "OK";
    }

注意:@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。如果该参数是可选的,可以将required属性设置为false。

SpringBoot方式会自动进行类型转换,如上面的age

实体参数

简单实体对象

请求参数名与形参对象属性名相同,定义POJO接收即可

如果对象里面有另一个对象,方式如下:

两个对象如下:

public class User {
    private String name;
    private Integer age;

    private Address address;
}

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

get,set等其他方法已省略

接收方式还是不变如上

    //2. 实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "OK";
    }

发送请求样例如下:

变化是多加了"点"进行访问

数组集合方式

数组参数

数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数

集合参数

集合参数:请求参数名与形参集合名称相同且请求参数为多个,@RequestParam 绑定参数关系

日期参数

日期参数:使用 @DateTimeFormat注解完成日期参数格式转换

JSON参数

响应

后端响应数据给前端

注意转换为JSON格式

代码样例:

javascript 复制代码
    //响应字符串
    @RequestMapping("/hello")
    public String hello(){
        System.out.println("Hello World ~");
        return "Hello World ~";
    }

    //响应对象
    @RequestMapping("/getAddr")
    public Address getAddr(){
        Address addr = new Address();
        addr.setProvince("广东");
        addr.setCity("深圳");
        return addr;
    }
    
    //响应集合
    @RequestMapping("/listAddr")
    public List<Address> listAddr(){
        List<Address> list = new ArrayList<>();

        Address addr = new Address();
        addr.setProvince("广东");
        addr.setCity("深圳");

        Address addr2 = new Address();
        addr2.setProvince("陕西");
        addr2.setCity("西安");

        list.add(addr);
        list.add(addr2);
        return list;
    }

运行后样例:

响应字符串:

javascript 复制代码
{
    "code": 1,
    "msg": "success",
    "data": "Hello World ~"
}

响应对象:

javascript 复制代码
{
    "code": 1,
    "msg": "success",
    "data": {
        "province": "广东",
        "city": "深圳"
    }
}

响应集合:

javascript 复制代码
{
    "code": 1,
    "msg": "success",
    "data": [
        {
            "province": "广东",
            "city": "深圳"
        },
        {
            "province": "陕西",
            "city": "西安"
        }
    ]
}

统一响应结果

好处就是只要返回result一个结果,提高代码复用性

代码样例

java 复制代码
@RequestMapping("/hello")
    public Result hello(){
        System.out.println("Hello World ~");
        //return new Result(1,"success","Hello World ~");
        return Result.success("Hello World ~");
    }

    @RequestMapping("/getAddr")
    public Result getAddr(){
        Address addr = new Address();
        addr.setProvince("广东");
        addr.setCity("深圳");
        return Result.success(addr);
    }

    @RequestMapping("/listAddr")
    public Result listAddr(){
        List<Address> list = new ArrayList<>();

        Address addr = new Address();
        addr.setProvince("广东");
        addr.setCity("深圳");

        Address addr2 = new Address();
        addr2.setProvince("陕西");
        addr2.setCity("西安");

        list.add(addr);
        list.add(addr2);
        return Result.success(list);
    }

Result对象代码:

java 复制代码
package com.ithema.pojo;

/**
 * 统一响应结果封装类
 */
public class Result {
    private Integer code ;//1 成功 , 0 失败
    private String msg; //提示信息
    private Object data; //数据 data

    public Result() {
    }
    public Result(Integer code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }

    public static Result success(Object data){
        return new Result(1, "success", data);
    }
    public static Result success(){
        return new Result(1, "success", null);
    }
    public static Result error(String msg){
        return new Result(0, msg, null);
    }

    @Override
    public String toString() {
        return "Result{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}
相关推荐
沉默的煎蛋1 天前
前后端交互过程
java·开发语言·ide·vscode·eclipse·状态模式·交互
大梦百万秋3 天前
云原生前端开发:打造现代化高性能的用户体验
状态模式
web147862107235 天前
SpringMVC的工作流程
状态模式
豪宇刘6 天前
SpringSecurity-前后端分离
状态模式
ThetaarSofVenice6 天前
少一点If/Else - 状态模式(State Pattern)
java·设计模式·状态模式
前端杂货铺9 天前
Node.js——http 模块(一)
http·node.js·状态模式
難釋懷10 天前
状态模式详解与应用
设计模式·状态模式
计算机小混子10 天前
C++实现设计模式---状态模式 (State)
c++·设计模式·状态模式
多多*10 天前
后端技术选型 sa-token校验学习 下 结合项目学习 前后端登录
java·redis·git·学习·github·intellij-idea·状态模式
JINGWHALE113 天前
设计模式 行为型 状态模式(State Pattern)与 常见技术框架应用 解析
前端·人工智能·后端·设计模式·性能优化·系统架构·状态模式