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

专门做画册封面的网站不用代码做网站的软件

专门做画册封面的网站,不用代码做网站的软件,如何刷app推广次数,网站制作需要学什么语言文章目录 前言一、统一的返回格式二、全局异常处理三、全局返回处理(装逼用的)总结 前言 项目中一般都会有规定好的接口返回格式,无论成功与失败,一般格式都是不变的,这样是为了方便前后端统一处理,今天就来说下前后端统一处理的较为优雅的方式; 一、统一的返回格式 一般而言…

文章目录

  • 前言
  • 一、统一的返回格式
  • 二、全局异常处理
  • 三、全局返回处理(装逼用的)
  • 总结


前言

项目中一般都会有规定好的接口返回格式,无论成功与失败,一般格式都是不变的,这样是为了方便前后端统一处理,今天就来说下前后端统一处理的较为优雅的方式;


一、统一的返回格式

一般而言都会有一个统一的返回类作为接口的返回数据的封装,例如:

@Data
public class Result<T> implements Serializable {private int code = HttpStatus.OK.value();private String msg;private T data;public static <T> Result<T> success() {return success(null);}public static <T> Result<T> failure() {return failure(HttpStatus.BAD_REQUEST.value(),HttpStatus.BAD_REQUEST.getReasonPhrase());}public static <T> Result<T> success(T data) {return new Result<T>(HttpStatus.OK.value(), HttpStatus.OK.getReasonPhrase(), data);}public static <T> Result<T> failure(int errorCode, String errorMsg) {return failure(errorCode, errorMsg, null);}public static <T> Result<T> failure(int code, String errorMsg, T data) {return new Result<T>(code, errorMsg, data);}public Result(int code, String msg, T data) {this.code = code;this.msg = msg;this.data = data;}}

然后我们通过此类作为返回参数的统一封装,这样无论成功与否,都是三个参数
code msg data

二、全局异常处理

  • 项目中难免会有异常抛出
    1. 服务端报错的异常
    2. 处理逻辑中的异常(参数校验, 逻辑不通等)
  • 由于我们一般都是前后端分离项目,所以都是接口方式的返回,那么我们只需要处理接口就可以了
@RestControllerAdvice
@Slf4j
public class ControllerExceptionHandel {@ExceptionHandler(ValidationException.class)public Result<String> handleException(ValidationException e) {e.printStackTrace();log.error("参数校验发生异常:{}", e.getMessage());return Result.failure(HttpStatus.BAD_REQUEST.value(), e.getMessage());}@ExceptionHandler(value = NullPointerException.class)public Result<String> exceptionHandler(NullPointerException e) {e.printStackTrace();log.error("空指针异常:{}", e.getMessage());return Result.failure(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());}@ExceptionHandler(value = {Exception.class, RuntimeException.class})public Result<String> exceptionHandler(Exception e) {e.printStackTrace();log.error("运行时发生异常:{}", e.getMessage());return Result.failure(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());}@ExceptionHandler(AsyncRequestTimeoutException.class)public Result<String> handException(AsyncRequestTimeoutException e) {e.printStackTrace();log.error("运行时超时异常:{}", e.getMessage());return Result.failure(HttpStatus.BAD_REQUEST.value(), e.getMessage());}
}

一般来说控制器可以这样用

@RestController
@RequestMapping("lang")
public class LangController {@RequestMapping("get")public Result get(){return Result.success(LocalUtil.get("demo"));}
}

三、全局返回处理(装逼用的)

还是上面的全局异常处理,不过要增加点东西

  • 实现ResponseBodyAdvice接口
  • 实现两个方法
    完整代码如下:
@RestControllerAdvice
@Slf4j
public class ControllerExceptionHandel implements ResponseBodyAdvice<Object>{@Autowiredprivate ObjectMapper objectMapper;@ExceptionHandler(ValidationException.class)public Result<String> handleException(ValidationException e) {e.printStackTrace();log.error("参数校验发生异常:{}", e.getMessage());return Result.failure(HttpStatus.BAD_REQUEST.value(), e.getMessage());}@ExceptionHandler(value = NullPointerException.class)public Result<String> exceptionHandler(NullPointerException e) {e.printStackTrace();log.error("空指针异常:{}", e.getMessage());return Result.failure(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());}@ExceptionHandler(value = {Exception.class, RuntimeException.class})public Result<String> exceptionHandler(Exception e) {e.printStackTrace();log.error("运行时发生异常:{}", e.getMessage());return Result.failure(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());}@ExceptionHandler(AsyncRequestTimeoutException.class)public Result<String> handException(AsyncRequestTimeoutException e) {e.printStackTrace();log.error("运行时超时异常:{}", e.getMessage());return Result.failure(HttpStatus.BAD_REQUEST.value(), e.getMessage());}@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}@SneakyThrows@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {Class<?> returnClass = returnType.getMethod().getReturnType();if (body instanceof String || Objects.equals(returnClass, String.class)) {return objectMapper.writeValueAsString(Result.success(body));}if (body instanceof Result) {return body;}return Result.success(body);}
}

这样控制器中既可以像之前那样使用,还可以像如下使用
它会自动封装返回结果,无需手动封装

@RestController
@RequestMapping("lang")
public class LangController {@RequestMapping("get")public String get(){return LocalUtil.get("demo");}
}

总结

如果项目中按照这种方式 @RestControllerAdvice + ResponseBodyAdvice接口,就能实现大部分的统一返回出参功能了,无论是正常请求还是异常请求,无论是简单类型还是集合返回,相当于都有了统一的封装处理;
快试试,用到项目中吧~

http://www.yayakq.cn/news/7530/

相关文章:

  • 音乐网站可做哪些内容做企业内部网站要多久
  • 中国建设银行官网的网站首页免费申请网站空间
  • 路由器电脑可以做网站主机海口装饰设计网站建设
  • 兖州网站建设多少钱wordpress主题 错误
  • 国外做设计的网站个人网站模板html下载
  • 保定网建站模板北京比较好的网站开发公司
  • 免费个人网站建站申请流程it外包公司是做什么的
  • 网站每年都要备案吗保定网站设计制作
  • 南阳seo网站建设费用网站后台管理系统栏目位置
  • 怎么学做电子商务网站符合三网标准的网站建设
  • 国外优秀的html5网站wordpress授权主题
  • 建设网站 安全事项wordpress安装路径
  • 简单网站制作实验报告工程师网站建设
  • 怎么建立网站数据库服务器中安装wordpress
  • 免费搭建购物网站seo关键词优化报价价格
  • 如何借用别人静态网站做模板交换链接营销
  • 深圳提供网站建设制作阿里云网站域名证书
  • 免费网站建设培训虚拟主机销售网站源码
  • 长沙网站定制开发建设网页设计实训报告1500
  • 个体户 做网站网站备案通过什么可以备案
  • 国家中职示范校建设专题网站兴安盟新百度县seo快速排名
  • jsp 做网站还是php重庆网站制作系统
  • 临翔网站建设免费编程软件哪个好用
  • 免费下载策划书的网站明星网页设计范例
  • 手机音乐网站源码在线免费建网站
  • 网站漂浮图片代码wordpress恶意 文章
  • 网站对应的ip广州市官网网站建设多少钱
  • 网站维护和建设实报告四合一做网站
  • 关于江西建设监督网网站迁移网上购物网站建设方案
  • 如何利用分类信息网站做推广一个网站可以有几个关键词