请求 响应

在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格式

代码样例:

    //响应字符串
    @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;
    }

运行后样例:

响应字符串:

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

响应对象:

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

响应集合:

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

统一响应结果

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

 代码样例

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

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. Django请求响应

    2024-06-10 00:22:03       42 阅读
  2. Ajax的请求响应

    2024-06-10 00:22:03       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-10 00:22:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-10 00:22:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-10 00:22:03       82 阅读
  4. Python语言-面向对象

    2024-06-10 00:22:03       91 阅读

热门阅读

  1. 【risc-v】arm和riscv有什么关系或者联系?

    2024-06-10 00:22:03       41 阅读
  2. 防火墙端口定时开放工具v2

    2024-06-10 00:22:03       44 阅读
  3. Python有什么功能:探索Python的无限可能

    2024-06-10 00:22:03       33 阅读
  4. 结构体构造函数

    2024-06-10 00:22:03       38 阅读
  5. Cweek4+5

    Cweek4+5

    2024-06-10 00:22:03      26 阅读
  6. C++查看编译后的代码

    2024-06-10 00:22:03       38 阅读
  7. C++迈向精通:STL的Deque复现

    2024-06-10 00:22:03       29 阅读
  8. 【DevOps】OpenVPN 实现分流的几种方法和实战

    2024-06-10 00:22:03       57 阅读
  9. Facebook开户 | 创建有效的Facebook广告文案策略

    2024-06-10 00:22:03       32 阅读
  10. C语言每日一题——分数加减(以最简形式输出)

    2024-06-10 00:22:03       28 阅读
  11. 面试 Redis 八股文十问十答第五期

    2024-06-10 00:22:03       31 阅读