当前位置: 首页 > news >正文

mvc网站开发 案例视频百度网盘电脑网页版

mvc网站开发 案例视频,百度网盘电脑网页版,广东网站备案需要多久,价格低廉SpringBoot教程(八) | SpringBoot统一结果封装 经过了前面几篇文章,SpringBoot中MVC相关的配置其实都已经差不多了,接下来就可以完全进入接口开发阶段了。前面我们写过几个接口,虽然都加了RestController注解,相当于统一了我们的…

SpringBoot教程(八) | SpringBoot统一结果封装

经过了前面几篇文章,SpringBoot中MVC相关的配置其实都已经差不多了,接下来就可以完全进入接口开发阶段了。前面我们写过几个接口,虽然都加了@RestController注解,相当于统一了我们的返回数据的基本形式为JSON,但是由于我们的项目可能是很多人一起开发,所以我们最好能够把我们的返回结果统一一下,让大家都返回一样的数据格式,这样即规范了代码,也方便了前端人员的调用,不然每个人都按照每个人的风格去写,代码会变得非常混乱。

那我我们怎么还封装这个结果呢,那就要关注我们返回给前端的数据都要包含哪些信息。

一般来讲,首先要有一个code, 用来代表我们这次接口的一个状态,比如 0代表成功,1代表失败,2代表必传参数不对, 4代表系统异常等等。这只是个简单的举例。可能很多人会有疑问,Http协议本身不是已经有了相应的返回码的定义了么,比如200代表成功, 500代表服务器错误,404代表找不到页面,为啥咱们还要在定义呢,这就是划分粒度的问题了,就那200来说,它代表是这次请求成功了,但是它描述不了这次请求中的业务结果,比如用户名已存在,其实业务上就不是一种成功,但http的结果肯定是200,所以我们需要一种描述我们业务状态的编码。

除了编码之外,还有要一些提示信息,比如,操作成功,系统异常,用户名已存在等,所以我们再加一个messge字段。

还有什么呢,还有我们的核心数据,比如我根据id获取数据,那个这个数据的具体内容,我们肯定是必须要返回给前端呢,所以还要 有个data, 那这个data 用什么类型呢,这个类型肯定是五花八门,所以我们要用一个统一的父类,Object才可以接收所有类型,当然为了便于操作我们可以采用泛型的方式。

通过上面的分析,我们的这个类基本上就已经可以设计出来了。

java复制代码public class Result<T> implements Serializable {private static final long serialVersionUID = -3960261604605958516L;private int code;private String msg;private T data;// get set方法,限于篇幅问题,这里不写了,大家操作的时候自己生成一下。或者使用lombokpublic static <T> Result<T> success() {return new Result<>();}/*** 成功,默认状态码,返回消息,自定义返回数据** @param data 自定义返回数据* @param <T>  返回类泛型,不能为String* @return 通用返回Result*/public static <T> Result<T> success(T data) {return new Result<>(data);}/*** 成功,默认状态码,自定义返回消息,无返回数据** @param msg 自定义返回消息* @param <T> 返回类泛型* @return 通用返回Result*/public static <T> Result<T> success(String msg) {return new Result<>(msg);}/*** 成功,默认状态码,自定义返回消息,返回数据** @param msg  自定义返回消息* @param data 自定义返回数据* @param <T>  返回类泛型* @return 通用返回Result*/public static <T> Result<T> success(String msg, T data) {return new Result<>(msg, data);}/*** 失败,默认状态码,返回消息,无返回数据** @param <T> 返回类泛型* @return 通用返回Result*/public static <T> Result<T> error() {return new Result<>(ResultCode.ERROR);}/*** 失败,默认状态码,自定义返回消息,无返回数据** @param <T> 返回类泛型* @return 通用返回Result*/public static <T> Result<T> error(String msg) {return new Result<>(ResultCode.ERROR.getCode(), msg);}/*** 失败,自定义状态码,返回消息,无返回数据** @param code 自定义状态码* @param msg  自定义返回消息* @param <T>  返回类泛型* @return 通用返回Result*/public static <T> Result<T> error(int code, String msg) {return new Result<>(code, msg);}/*** 失败,使用CodeMsg状态码,返回消息,无返回数据** @param resultCode CodeMsg,参数如下:*                   <p> code 状态码*                   <p> msg  返回消息* @param <T>        返回类泛型* @return 通用返回Result*/public static <T> Result<T> error(ResultCode resultCode) {return new Result<>(resultCode);}/*** 成功构造器,无返回数据*/private Result() {this(ResultCode.SUCCESS);}/*** 成功构造器,自定义返回数据** @param data 返回数据*/private Result(T data) {this(ResultCode.SUCCESS, data);}/*** 成功构造器,自定义返回消息,无返回数据** @param msg 返回消息*/private Result(String msg) {this(ResultCode.SUCCESS.getCode(), msg);}/*** 成功构造器,自定义返回信息,返回数据** @param msg  返回信息* @param data 返回数据*/private Result(String msg, T data) {this(ResultCode.SUCCESS.getCode(), msg, data);}/*** 构造器,自定义状态码,返回消息** @param code 状态码* @param msg  返回消息*/private Result(int code, String msg) {this.code = code;this.msg = msg;}/*** 构造器,自定义状态码,返回消息,返回数据** @param code 状态码* @param msg  返回消息* @param data 返回数据*/private Result(int code, String msg, T data) {this(code, msg);this.data = data;}/*** 构造器,使用CodeMsg状态码与返回信息** @param resultCode CodeMsg,参数如下:*                   <p> code 状态码*                   <p> msg  返回消息*/private Result(ResultCode resultCode) {this(resultCode.getCode(), resultCode.getMsg());}/*** 构造器,使用CodeMsg状态码与返回信息,自定义返回数据** @param resultCode CodeMsg,参数如下:*                   <p> code 状态码*                   <p> msg  返回消息* @param data       返回数据*/private Result(ResultCode resultCode, T data) {this(resultCode);this.data = data;}}

在定义几个常见的错误:这里为了不写那么多的get,set,我们引入了lombok

java复制代码@Data
@Builder
public class ResultCode implements Serializable {private static final long serialVersionUID = -6269841958947880397L;/*** 状态码*/private int code;/*** 状态信息*/private String msg;/*** 默认成功*/public final static ResultCode SUCCESS = dispose(ResultCodeEnum.SUCCESS);/*** 默认失败*/public final static ResultCode ERROR = dispose(ResultCodeEnum.ERROR);/*** 通用业务异常*/public final static ResultCode BIZ_ERROR = dispose(ResultCodeEnum.BIZ_ERROR);/*** 文件超出最大限制*/public final static ResultCode FILE_OUT_MAX = dispose(ResultCodeEnum.FILE_OUT_MAX);/*** 文件格式不正确*/public final static ResultCode FILE_FORMAT_ERROR = dispose(ResultCodeEnum.FILE_FORMAT_ERROR);/*** 参数错误*/public final static ResultCode PARAM_ERROR = dispose(ResultCodeEnum.PARAM_ERROR);/*** Json解析异常*/public final static ResultCode JSON_FORMAT_ERROR = dispose(ResultCodeEnum.JSON_FORMAT_ERROR);/*** Sql解析异常*/public final static ResultCode SQL_ERROR = dispose(ResultCodeEnum.SQL_ERROR);/*** 网络超时*/public final static ResultCode NETWORK_TIMEOUT = dispose(ResultCodeEnum.NETWORK_TIMEOUT);/*** 未知的接口*/public final static ResultCode UNKNOWN_INTERFACE = dispose(ResultCodeEnum.UNKNOWN_INTERFACE);/*** 请求方式不支持*/public final static ResultCode REQ_MODE_NOT_SUPPORTED = dispose(ResultCodeEnum.REQ_MODE_NOT_SUPPORTED);/*** 系统异常*/public final static ResultCode SYS_ERROR = dispose(ResultCodeEnum.SYS_ERROR);private static ResultCode dispose(ResultCodeEnum codeEnum) {return ResultCode.builder().code(codeEnum.getCode()).msg(codeEnum.getMsg()).build();}public ResultCode(int code, String msg) {this.code = code;this.msg = msg;}
}
java复制代码public enum ResultCodeEnum {SUCCESS(0, "操作成功"),ERROR(1, "操作失败"),BIZ_ERROR(1000, "通用业务异常"),FILE_OUT_MAX(9000, "文件超出最大限制"),FILE_FORMAT_ERROR(9001, "文件格式不正确"),PARAM_ERROR(9050, "参数错误"),JSON_FORMAT_ERROR(9051, "Json解析异常"),SQL_ERROR(9052, "Sql解析异常"),NETWORK_TIMEOUT(9510, "网络超时"),UNKNOWN_INTERFACE(9520, "未知的接口"),REQ_MODE_NOT_SUPPORTED(9530, "请求方式不支持"),SYS_ERROR(9999, "系统异常");/*** 状态码*/private final int code;/*** 状态信息*/private final String msg;public int getCode() {return code;}public String getMsg() {return msg;}ResultCodeEnum(int code, String msg) {this.code = code;this.msg = msg;}
}

这个写完了以后,就可以统一我们的返回结果,以后所有的Controller就都要返回Result类型。比如:

java复制代码@GetMapping("/withinRangeResource")public Result<List<EmergencyExpertResVO>> withinRangeResource(@Valid ResourceRangeReqVO param) {List<EmergencyExpertResVO> expertResVOS = emergencyExpertBiz.getWithinRangeResource(param);return Result.success(expertResVOS);}

另: 配套项目代码已托管中gitCode: gitcode.net/lsqingfeng/…


文章转载自:
http://sanctimonial.qkrz.cn
http://hour.qkrz.cn
http://wear.qkrz.cn
http://harborage.qkrz.cn
http://nightwear.qkrz.cn
http://pellock.qkrz.cn
http://berberis.qkrz.cn
http://indefensibility.qkrz.cn
http://divisa.qkrz.cn
http://paragrapher.qkrz.cn
http://cystoscopy.qkrz.cn
http://venule.qkrz.cn
http://forthwith.qkrz.cn
http://tangibly.qkrz.cn
http://farruca.qkrz.cn
http://fluerics.qkrz.cn
http://woodchuck.qkrz.cn
http://copartnership.qkrz.cn
http://sextuple.qkrz.cn
http://laryngitist.qkrz.cn
http://evitable.qkrz.cn
http://traprock.qkrz.cn
http://cases.qkrz.cn
http://turkish.qkrz.cn
http://isaiah.qkrz.cn
http://gomphosis.qkrz.cn
http://conification.qkrz.cn
http://poinsettia.qkrz.cn
http://companionship.qkrz.cn
http://recandescence.qkrz.cn
http://nemo.qkrz.cn
http://constringe.qkrz.cn
http://inclose.qkrz.cn
http://caboose.qkrz.cn
http://refractable.qkrz.cn
http://truceless.qkrz.cn
http://mossbunker.qkrz.cn
http://archaeopteryx.qkrz.cn
http://blasphemous.qkrz.cn
http://chemoprophylactic.qkrz.cn
http://fhlbb.qkrz.cn
http://waymark.qkrz.cn
http://layshaft.qkrz.cn
http://dreadless.qkrz.cn
http://simtel.qkrz.cn
http://sunken.qkrz.cn
http://artfully.qkrz.cn
http://ericoid.qkrz.cn
http://tola.qkrz.cn
http://susceptivity.qkrz.cn
http://unbridled.qkrz.cn
http://tensiometer.qkrz.cn
http://iridochoroiditis.qkrz.cn
http://outcry.qkrz.cn
http://ennyyee.qkrz.cn
http://phytopathogen.qkrz.cn
http://wherewithal.qkrz.cn
http://hexachlorobenzene.qkrz.cn
http://wes.qkrz.cn
http://damnation.qkrz.cn
http://uniparental.qkrz.cn
http://semiconical.qkrz.cn
http://mephitis.qkrz.cn
http://honeydew.qkrz.cn
http://interdental.qkrz.cn
http://denet.qkrz.cn
http://sejant.qkrz.cn
http://ghee.qkrz.cn
http://godavari.qkrz.cn
http://jingbang.qkrz.cn
http://leze.qkrz.cn
http://gangster.qkrz.cn
http://rockrose.qkrz.cn
http://preagricultural.qkrz.cn
http://germproof.qkrz.cn
http://grandnephew.qkrz.cn
http://wade.qkrz.cn
http://zenithal.qkrz.cn
http://machineman.qkrz.cn
http://lexloci.qkrz.cn
http://kneebend.qkrz.cn
http://wayless.qkrz.cn
http://fastigiate.qkrz.cn
http://referendum.qkrz.cn
http://babbling.qkrz.cn
http://violoncello.qkrz.cn
http://saponification.qkrz.cn
http://serialise.qkrz.cn
http://butane.qkrz.cn
http://metaphorist.qkrz.cn
http://microsporidian.qkrz.cn
http://inauspicious.qkrz.cn
http://felid.qkrz.cn
http://unprohibited.qkrz.cn
http://days.qkrz.cn
http://jul.qkrz.cn
http://hhs.qkrz.cn
http://breather.qkrz.cn
http://sungar.qkrz.cn
http://unpatented.qkrz.cn
http://www.hrbkazy.com/news/73636.html

相关文章:

  • 金华网抖音搜索seo
  • 阿里云 网站部署免费网站电视剧全免费
  • 青岛 网站备案seo算法是什么
  • 贵阳网页设计培训seo排名优化什么意思
  • 金坛做网站哪家好网络服务合同
  • 海淀网站建设服务怎么样创建网站
  • 做一视频网站多少钱seo建站技巧
  • seo技术建站web网页制作成品免费
  • 职场seo是什么意思seo企业站收录
  • 官方网站建设状况武汉抖音seo搜索
  • 建设网站招聘美国最新消息今天 新闻
  • 如何在网站中加入百度地图网推怎么做
  • 男子和美女做bt网站网站优化 推广
  • 做网站的复式照片百度云手机app下载
  • 淄博网站推广那家好疫情防控最新数据
  • 团购网站模板网站seo优化
  • 宁远县建设局网站深圳谷歌seo公司
  • 风控网站开发日照高端网站建设
  • 手机网站图片优化my77728域名查询
  • 什么浏览器适合看网站中国万网域名注册免费
  • 聊城做网站费用价格企业seo案例
  • 做地图特效的网站国外搜索引擎排行榜
  • 手机怎么看网页源代码免费seo工具
  • 提供北京国互网网站建设西安优化外
  • 哪个网站专门做灵异文东莞做网站优化
  • 哪些网站专做新闻app开发平台
  • 企业推广渠道有哪些seo优化专员
  • 贵阳58同城做网站自助建站系统个人网站
  • 家庭办厂10万左右项目杭州优化建筑设计
  • fancybox2 wordpress西安seo排名外包