请求 响应

作者 : admin 本文共3564个字,预计阅读时间需要9分钟 发布时间: 2024-06-9 共1人阅读

在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";
    }

请求 响应插图(1)

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

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

请求 响应插图(2)

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

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

实体参数

简单实体对象

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

请求 响应插图(3)

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

两个对象如下:

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";
    }

发送请求样例如下:

请求 响应插图(4)

 变化是多加了“点”进行访问

数组集合方式

数组参数

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

请求 响应插图(5)

集合参数

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

 请求 响应插图(6)

 日期参数

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

请求 响应插图(7)

 JSON参数

请求 响应插图(8)

 响应

后端响应数据给前端

请求 响应插图(9)

注意转换为JSON格式

代码样例:

    //响应字符串
    @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 listAddr(){
        List 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;
    }

运行后样例:

响应字符串:

{
    "code": 1,
    "msg": "success",
    "data": "Hello World ~"
}

响应对象:

{
    "code": 1,
    "msg": "success",
    "data": {
        "province": "广东",
        "city": "深圳"
    }
}

响应集合:

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

统一响应结果

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

请求 响应插图(10)

 代码样例

@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 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对象代码:

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 +
                '}';
    }
}

本站无任何商业行为
个人在线分享 » 请求 响应
E-->