请求响应-响应-@ResponseBody&统一响应结果

请求响应-响应-@ResponseBody&统一响应结果

响应:

  • 设置响应数据,那么其实呢,在我们前面所有的controller方法当中,都已经设置了响应数据,比如我们在入门程序中:浏览器地址发起了一个请求之后,会请求到controller中的一个方法,而在这个controller方法中我最终给浏览器响应了这么一个字符串hello world。再比如我们所有的方法最终都给客户端浏览器响应了一个ok。

在这里插入图片描述
在这里插入图片描述

@ResponseBody

  • 那么其实我们在controller方法中编写代码的时候,是直接return了返回了一个字符串,这个返回值就会作为响应数据直接响应给客户端浏览器,这些能都比较依赖一个核心注解@ResponseBody
  • 但是我们会发现@ResponseBody我们好像从来没有见过,其实呢我们在controller类上所加的一个注解叫@RestController,这个注解就包含了这个@ResponseBody。
    在这里插入图片描述
    在这里插入图片描述
  • 我们准备了一个ResponseController程序:
    定义了三个方法,它们的返回值分别是字符串,对象,集合。启动会这个程序
    在这里插入图片描述
package com.csdn.controller;


import com.csdn.pojo.Address;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;

import java.util.List;


/*
 * 测试响应数据
 **/
@RestController
public class ResponseController {

    @RequestMapping("/hello")
    public String hello() {
        System.out.println("hello");
        return "hello";
    }

    @RequestMapping("/getAddr")
    public Address getAddr() {
        Address addr = new Address();
        addr.setCity("beijing");
        addr.setProvince("beijing");
        return addr;

    }

    @RequestMapping("/listAddr")
    public List<Address> listAddr() {
        List<Address> list = new ArrayList<>();
        Address addr = new Address();
        addr.setProvince("sahnghai");
        addr.setCity("shanghia");
        Address addr2 = new Address();
        addr2.setCity("beijing");
        addr2.setProvince("beijing");
        list.add(addr);
        list.add(addr2);

        return list;
    }

}

打开postman发起请求:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 刚才所开发的三个功能接口,它们的返回值分别是字符串,对象,集合。经过@ResponseBody的处理之后呢,最终响应给前端的就是简单滴字符串,一个json格式的数据,以及一个json格式的数组。我们会发现每一个接口响应回去的数据很随意,没有规范可言。如果我们开发的是一个大型项目,所涉及到的功能接口可能是成百上千,甚至于成千上万,如果没有一套统一的项目规范,前端人员发起请求访问到我们所开发的接口,那最终我们响应的数据各式各样都有,那最后前端人员呢就需要拿到结果进行解析,一会这样解析一会那样解析,那这样前后端开发的成本就会增加。那最终我们会发现:不便管理,难以维护。
    在这里插入图片描述
  • 我们会给所有的功能接口设置统一的响应结果:
    在这里插入图片描述
  • 统一响应结果的封装类:
    在这里插入图片描述
package com.csdn.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 +
                '}';
    }
}

  • 对刚才的Controller程序程序进行改造:
    在这里插入图片描述
package com.csdn.controller;


import com.csdn.pojo.Address;
import com.csdn.pojo.Result;
import org.springframework.util.concurrent.SuccessCallback;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;

import java.util.List;


/*
 * 测试响应数据
 **/
@RestController
public class ResponseController {

/*
    @RequestMapping("/hello")
    public String hello() {
        System.out.println("hello");
        return "hello";
    }

    @RequestMapping("/getAddr")
    public Address getAddr() {
        Address addr = new Address();
        addr.setCity("beijing");
        addr.setProvince("beijing");
        return addr;

    }

    @RequestMapping("/listAddr")
    public List<Address> listAddr() {
        List<Address> list = new ArrayList<>();
        Address addr = new Address();
        addr.setProvince("sahnghai");
        addr.setCity("shanghia");
        Address addr2 = new Address();
        addr2.setCity("beijing");
        addr2.setProvince("beijing");
        list.add(addr);
        list.add(addr2);

        return list;
    }
*/

    @RequestMapping("/hello")
    public Result hello() {
        System.out.println("hello");
        //return new Result(1, success,"hello world");
        return Result.success("hello");

    }

    @RequestMapping("/getAddr")
    public Result getAddr() {
        Address addr = new Address();
        addr.setCity("beijing");
        addr.setProvince("beijing");
        return Result.success("addr");

    }

    @RequestMapping("/listAddr")
    public Result listAddr() {
        List<Address> list = new ArrayList<>();
        Address addr = new Address();
        addr.setProvince("sahnghai");
        addr.setCity("shanghia");
        Address addr2 = new Address();
        addr2.setCity("beijing");
        addr2.setProvince("beijing");
        list.add(addr);
        list.add(addr2);

        return Result.success(list);
    }

}

打开postman发起请求:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zkzap

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值