精华内容
下载资源
问答
  • vue后端通用返回封装

    2020-04-15 13:08:11
    import lombok.Data; import java.util.HashMap; import java.util.Map; /** * @author :穆繁强 * @date :Created in ... * @description:统一返回结果 * @modified By: * @version: v1$ */ @Data public...
    import lombok.Data;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @author :穆繁强
     * @date :Created in 2020/3/28 14:09
     * @description:统一返回结果
     * @modified By:
     * @version: v1$
     */
    @Data
    public class R {
    
        private Boolean success;
    
        private Integer code;
    
        private String message;
    
        private Map<String, Object> data = new HashMap<>();
    
        private R() {
        }
    
        public static R ok() {
            R r = new R();
            r.setSuccess(true);
            r.setCode(ResultCode.SUCCESS);
            r.setMessage("成功");
            return r;
        }
    
        public static R error() {
            R r = new R();
            r.setSuccess(false);
            r.setCode(ResultCode.ERROR);
            r.setMessage("失败");
            return r;
        }
    
        public R success(Boolean success) {
            this.setSuccess(success);
            return this;
        }
    
        public R message(String message) {
            this.setMessage(message);
            return this;
        }
    
        public R code(Integer code) {
            this.setCode(code);
            return this;
        }
    
        public R data(String key, Object value) {
            this.data.put(key, value);
            return this;
        }
    
        public R data(Map<String, Object> map) {
            this.setData(map);
            return this;
        }
    }
    
    
    展开全文
  • 后端返回结果 前后端分离后 web 端要求结果 { "counts": 2694, "pagesize": 14, "pages": 8, "page": 66, "items": [ { "id": 9009384, "title": "nulla ea quis laboris", "create_date": 1773009 } ] ...

    遇到前后端业务需要不一致时对Controller返回结果进行封装

    后端返回结果
    在这里插入图片描述
    前后端分离后 web 端要求结果

    {
      "counts": 2694,
      "pagesize": 14,
       "pages": 8,
       "page": 66,
       "items": [
      {
       "id": 9009384,
       "title": "nulla ea quis laboris",
       "create_date": 1773009
       }
      ]
    }
    }
    

    自定义VO对象进行转换

    @Data
    public class PageVO<T> {
    
        private  long counts; //总个数
        private  long pagesize; //每页个数
        private  long pages; //总页数
        private  long page; //当前页
        private List<T> items; //数据记录
    
        public PageVO(IPage page) {
            this.pagesize = page.getSize();
            this.counts = page.getTotal();
            this.page = page.getCurrent();
            this.pages = page.getPages();
            this.items = page.getRecords();
        }
    }
    

    结合pageVo进行封装

    @ApiOperation(value = "分页列表查询(按照规范)")
        @ApiImplicitParams({
                @ApiImplicitParam(paramType="path", name = "page", value = "当前页码", required = true, dataType = "Integer"),
                @ApiImplicitParam(paramType="path", name = "pageSize", value = "分大小", required = true, dataType = "Integer"),
                @ApiImplicitParam(paramType="query", name = "name", value = "用户名", required = false, dataType = "String")
        })
        @GetMapping("/pagevoList/{page}/{pageSize}")
        public PageVO<OperatorUser> findListByPageVO(@PathVariable(name = "page") int pageNo
                , @PathVariable(name = "pageSize") int pageSize
                , @RequestParam(name = "name",required = false) String name){
    ​
            IPage<OperatorUser>  page= operatorUserService.queryPageByName(pageNo, pageSize, name);
            PageVO<OperatorUser> pageV0= new PageVO<OperatorUser>(page);
            return  pageV0;
        }
    

    结果根据需要进行封装
    在这里插入图片描述

    处理复杂业务
    需求:
    在这里插入图片描述
    一、对返回状态进行统计封装

    /**
     * 返回结果通用对象封装
     */
    @Data
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public class BaseResponse<D> implements Serializable{
        
        private static final long serialVersionUID = -2145852753254617071L;
        
        //是否成功
        private boolean success;
        
        //异常信息
        private String message;
        
        //200表示正常,300接口返回false,400调用异常
        private int code;
        
        //泛型,用来存储原有controller返回值
        private D data;public BaseResponse() {
            this.code = 200;
            this.message = "success";
            this.success = true;
        }
    ​
    ​
        public BaseResponse(D data){
            this();
            this.data = data;
        }public BaseResponse(boolean success){
            this();
            this.success = success;
            if(success == false){
                this.message = "操作失败";
                this.code = 300;
            }
        }public BaseResponse(boolean success,String msg){
            this(success);
            this.message = msg;
        }public BaseResponse(int code,String msg){
            this(false,msg);
            this.code = code;
        }
    }
    

    因为当前所有的controller对于数据返回的类型有boolean、Result、PageVO。因此当前的解决思路是设置返回值拦截,进行数据格式组装。

    /**
     * 返回结果统一转换
     */
    @RestControllerAdvice(basePackages = "com.restkeeper")
    public class ResponseAdvisor implements ResponseBodyAdvice<Object> {/**
         *  判断哪些需要拦截
         */
        @Override
        public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
            return true;
        }/**
         * 返回结果包装
         * @param body controller返回的数据
         * @param returnType
         * @param selectedContentType
         * @param selectedConverterType
         * @param request
         * @param response
         * @return
         */
        @Override
        public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {if (body instanceof Result){
                return body;
            }if (body instanceof Boolean){
                boolean result = (boolean)body;
                return new BaseResponse<Boolean>(result);
            }if (body instanceof PageVO){
                return new BaseResponse<>(body);
            }return new BaseResponse<>(body);
        }
    }
    
    展开全文
  • Response 类 public class Response { /**** * 成功响应Msg中的信息 **/ private final static String SUCCESS = "success"; /**** ... private final static String FAILED = "failed";... Res.
    Response 
    
    public class Response {
    
        /****
         * 成功响应Msg中的信息
         **/
        private final static String SUCCESS = "success";
    
        /****
         * 失败响应Msg中的信息
         **/
        private final static String FAILED = "failed";
    
      
        public static <T> Result<T> success() {
            return new Result<T>().setCode(ResultsCode.SUCCESS).setMsg(SUCCESS);
        }
    
      
        public static <T> Result<T> success(T data) {
            return new Result<T>().setCode(ResultsCode.SUCCESS).setMsg(SUCCESS).setData(data);
        }
    
        
        public static <T> Result<T> error(ResultsCode resultsCode) {
            return new Result<T>().setCode(resultsCode.code).setMsg(resultsCode.message);
        }
    
        
        public static <T> Result<T> error(String mesage) {
            return new Result<T>().setMsg(mesage).setCode(ResultsCode.FAIL);
        }
    
      
        public static <T> Result<T> error(String mesage, ResultsCode resultsCode) {
            return new Result<T>().setMsg(mesage).setCode(resultsCode.code);
        }
    
        public static <T> Result<T> error() {
            return new Result<T>().setCode(ResultsCode.FAIL).setMsg(FAILED);
        }
    
    
    }
    

     

     

    Result 

     

    
    public class Result<T> implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        public int code;
    
        private String msg;
    
        private T data;
    
        public void Result() {
            this.code = ResultsCode.SUCCESS.code;
            this.msg = ResultsCode.SUCCESS.message;
        }
    
        public Result<T> setCode(ResultsCode resultsCode) {
            this.code = resultsCode.code;
            return this;
        }
    
        public int getCode() {
            return code;
        }
    
        public Result<T> setCode(int code) {
            this.code = code;
            return this;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public Result<T> setMsg(String msg) {
            this.msg = msg;
            return this;
        }
    
        public T getData() {
            return data;
        }
    
        public Result<T> setData(T data) {
            this.data = data;
            return this;
        }
    
        @Override
        public String toString() {
            return "{" +
                    "code=" + code +
                    ", msg='" + msg + '\'' +
                    ", data=" + data +
                    '}';
        }
    }

     

     

    ResultsCode 
    /***
     * @Author lanxuqiang
     * @Description 错误码枚举
     * @Date 14:38 2020/9/23
     * @Param
     * @return
     **/
    public enum ResultsCode {
    
        SUCCESS(200, "成功"),
    
        FAIL(-1, "失败"),
    
        ERROR(500, "服务器异常"),
    
        UNAUTHORIZED(401, "未认证(签名错误)"),
    
        NOT_FOUND(404, "接口不存在"),
    
     
    
        public int code;
        public String message;
    
        ResultsCode(int code, String message) {
            this.code = code;
            this.message = message;
        }
    }
    

      例子:

    @ResponseBody
     Response.error(ResultsCode.MIDDLEMAN_REGISTER_ERROR);
     Response.success(实体对象);
    展开全文
  • 项目中我们会将响应封装成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致、轻松。 一般情况下,统一返回数据格式没有固定的格式,只要能描述清楚返回的数据状态以及要...

    一、统一返回数据格式

    项目中我们会将响应封装成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致、轻松。
    一般情况下,统一返回数据格式没有固定的格式,只要能描述清楚返回的数据状态以及要返回的具体数据就可以。但是一般会包含状态码、返回消息、数据这几部分内容
    例如,我们的系统要求返回的基本数据格式如下:
    列表:

    {
      "success": true,
      "code": 20000,
      "message": "成功",
      "data": {
        "items": [
          {
            "id": "1",
            "name": "刘德华",
            "intro": "毕业于师范大学数学系,热爱教育事业,执教数学思维6年有余"
          }
        ]
      }
    }
    

    分页:

    {
      "success": true,
      "code": 20000,
      "message": "成功",
      "data": {
        "total": 17,
        "rows": [
          {
            "id": "1",
            "name": "刘德华",
            "intro": "毕业于师范大学数学系,热爱教育事业,执教数学思维6年有余"
          }
        ]
      }
    }
    

    没有返回数据:

    {
      "success": true,
      "code": 20000,
      "message": "成功",
      "data": {}
    }
    

    失败:

    {
      "success": false,
      "code": 20001,
      "message": "失败",
      "data": {}
    }
    

    因此,我们定义统一结果

    {
      "success": 布尔, //响应是否成功
      "code": 数字, //响应码
      "message": 字符串, //返回消息
      "data": HashMap //返回数据,放在键值对中
    }
    

    二、创建统一结果返回类

    1、在common模块下创建子模块common-utils
    在这里插入图片描述

    2、创建接口定义响应码
    创建包com.atguigu.commonutils,创建接口 ResultCode.java

    package com.atguigu.commonutils;
    
    public interface ResultCode {
        public static Integer SUCCESS = 20000;
        public static Integer ERROR = 20001;
    }
    

    3、创建结果类
    创建类 R.java

    @Data
    public class R {
        @ApiModelProperty(value = "是否成功")
        private Boolean success;
        @ApiModelProperty(value = "返回码")
        private Integer code;
        @ApiModelProperty(value = "返回消息")
        private String message;
        @ApiModelProperty(value = "返回数据")
    
        private Map<String, Object> data = new HashMap<String, Object>();
        
        private R(){}
    
        public static R ok(){
            R r = new R();
            r.setSuccess(true);
            r.setCode(ResultCode.SUCCESS);
            r.setMessage("成功");
            return r;
    
        }
    
        public static R error(){
            R r = new R();
            r.setSuccess(false);
            r.setCode(ResultCode.ERROR);
            r.setMessage("失败");
            return r;
        }
    
        public R success(Boolean success){
            this.setSuccess(success);
            return this;
        }
    
        public R message(String message){
            this.setMessage(message);
            return this;
        }
    
        public R code(Integer code){
            this.setCode(code);
            return this;
        }
    
        public R data(String key, Object value){
            this.data.put(key, value);
            return this;
        }
    
        public R data(Map<String, Object> map){
            this.setData(map);
            return this;
        }
    }
    

    三、统一返回结果使用

    1、在service模块中添加依赖

    <dependency>
        <groupId>com.atguigu</groupId>
        <artifactId>common_utils</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    

    2、修改Controller中的返回结果
    列表

    @ApiOperation(value = "所有讲师列表")
    @GetMapping
    public R list(){
        List<Teacher> list = teacherService.list(null);
        return R.ok().data("items", list);
    }
    

    删除

    @ApiOperation(value = "根据ID删除讲师")
    @DeleteMapping("{id}")
    public R removeById(
        @ApiParam(name = "id", value = "讲师ID", required = true)
        @PathVariable String id){
        teacherService.removeById(id);
        return R.ok();
    }
    
    展开全文
  • java后端封装标准返回类到前端

    千次阅读 2019-08-03 10:54:37
    在日常开发中,我们后端和前端最好是约定一个数据格式,用于后端封装好数据,然后返回前端,前端就可以很简单地就解析了,下面是我总结出来经常会那么用的模板,可以参考一下: 1、创建对象 直接在实体包下面新建...
  • 后端返回的内容 传参后拿到的是上图显示的结果,前端如何实现下载此文件为excle或者zip呢?一起来看看吧: 前端实现下载 在项目封装的统一请求的文件中加入responseType : "blob"即可。 注意:该代码应与headers...
  • 现阶段越来越多的项目采用前后端的分离开发模式,前端请求后台接口获取数据,后台返回结果,这时我们往往会定义好一种固定的数据格式来实现数据的传递,下面就本人在开发中常用的数据对象来做简单说明 我们在开发中...
  • 在项目框架整合阶段,为了更优雅的封装后端返回结果,便于前后端联调,通常需要对后端的返回值进行一定的封装处理,下面介绍2种比较实用的方式 方式1:常规处理 定义一个枚举类,主要包括返回的code和message,更多...
  • 在开发过程中,我们在controller 中把需要返回结果封装成一个IMoocJSONResult类,再把数据转换为json格式,传送到前端页面。 IMoocJSONResult类代码: package com.imooc.utils; /** * @Description: 自定义响应...
  • 封装统一返回结果

    2021-05-09 18:07:50
    那么前后端需要提前定义好数据格式,为了减少沟通成本,需要封装一个统一返回结果的。 响应类 @Getter //@ApiModel(value = "全局统一返回结果") public class Result { // @ApiModelProperty(value = "是否成功") ...
  • 前端向后端传参数,后端用自己封装的实体类Page来接收,目的是为了实现根据前端传入的字段sort和order进行正序或倒序排序,log日志显示传入的参数信息正常,但是查询返回结果并没有进行排序,查询的sql语句如下: ...
  • 项目中我们会将响应封装成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致、轻松。 一、统一返回的JSON数据格式 一般情况下,统一返回数据格式没有固定的格式,只要...
  • 后端给前端统一返回结果

    千次阅读 2020-11-16 21:06:48
    项目中我们会将响应封装成json返回给前端,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致、轻松。 一般情况下,统一返回数据格式没有固定的格式,只要能描述清楚返回的数据...
  • SpringMVC中提供了接口,对返回结果进行统一封装。 2、代码 import com.*.*.base.BaseResponse; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; impo...
  • 后端返回文件流,接收传回来的response.data,使用URL.createObjectURL方法转化成blobURL,放入a标签中模拟点击下载后,没反应,打断点发现a.click()返回undefined,一开始还以为是blobURL不对,检查了好几天,感觉...
  • java后端 模拟前端想要的数据 返回给前端 下图是前端需要的数据格式 (json格式) code 和data 是框架封装好的 所以不用管 创建实体类 后端模拟方法: 前端接收到的结果: { "code": 200, "data": { ...
  • 一、前话 看本文之前请先看《前后端分离开发:Spring Boot...这样从后端返回结果就真正意义上统一了。 1 为统一异常处理前的后端返回的默认异常信息 三、统一异常处理 1 分析 一般在微服务架构的应用中,有许多的
  • 后端随记

    2019-01-31 13:54:34
    转换的时候,如果被转换对象有父类,同时会将父类的字段也全部转换,所以如果想排除很多字段,可以 新建一个实体,包含自己需要的字段,xml文件中,返回结果集直接封装到这个实体对应字段中;...
  • 返回json结果封装 在MVC模式中Controller接口类里面一般有两种返回值:rest api的json格式数据、页面;在前后端开发模式中,后端开发人员与前端开发人员会对接口返回值进行约定,返回值一般是以rest api的json...
  • java统一返回结果

    千次阅读 2020-01-08 18:05:46
    后端返回统一的结果集,例如包括状态码等信息,可以让前端更好的进行页面的展示。封装这样一个结果集有通用且常用的几个属性: status: 状态码 msg:状态信息 data:返回数据 针对我在bootstrap-table返回数据的...
  • 数据校验JSR330后端数据校验JSR330规范详解Tip后端校验1、给bean添加注解2、在controller开启校验 @Vaild3、在controller使用BindingResult接收校验结果4、将校验结构封装成map返回5、效果如图6、常用的校验注
  • axios发送请求到后端,后台使用io流进行文件读写,并吧结果响应到前端 ,一般如果我们不设置axios接收的是json格式的数据,这样后端在调用下载借口时返回的响应数据是接收不到的 所以我们在发送请求前要设置接收文件...
  • 后端商品实体的id字段为Long,从ES中查出封装,以Json的形式返回给前端。结果发现前端展示的的id全为 1244864296175140900。通过在后端打印查出的数据发现实际id有:1244864296175140890、1244864296175140889等等。...
  • 目录前言1、返回结果集的封装2、防止恶意截取密码3、防止异常攻击,跳过前端规则验证4、通用的key生成策略5、集中使用RedisService中的方法后言 前言 把之前的一个代码给优化和封装,使得代码看的更加得体。 本次...
  • 在提倡前后端分离的当下,统一返回结果就显得尤其重要,在com.example.backend_template.utils下新增ResultData类package com.example.backend_template.utils; /** * @ClassName ResultData 封装结果集成统一的...
  • 框架性质的C 层要完成的主要工作:封装web 请求为一个数据对象、调用业务逻辑层来处理数据对象、返回处理数据结果及相应的视图给用户。 2. 简要概述springmvc Spring C 层框架的核心是 DispatcherServlet,它的作用...
  • 但是根据需求的不同,我们每个人写的方法返回值也大不相同,这就会造成代码维护及阅读造成很大的困扰,因此我们都会封装一个公共的返回对象,已便同意返回结果格式。 例如:{“code”:“200”,“success”:“true”,...
  • 由于后端返回数据采用统一的数据结构,所以不管是SpringBoot还是SpringMVC,都运用了ResponseBodyAdvice类以及@ControllerAdvice注解来辅助。 项目中有一个接口是来接收公众号推事件的。最近不知道怎么的,一直出现...
  • 大部分情况我们写程序返回后端都是直接在需要返回的节点写个return即可,不管是前端请求需要的结果还是意料之外的结果都是如此,有时候我们可以使用抛出异常的方式告知前端获取的结果与其意愿不符。   大...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 153
精华内容 61
关键字:

后端返回结果封装