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

onethink 网站/营销型网站制作成都

onethink 网站,营销型网站制作成都,城口网站建设,天津seo一.SpringMVC统一返回值格式 1. ResponseBodyAdvice的简介 ResponseBodyAdvice是在Controller执行return后,在response返回给前端之前将response拦截,在对response做处理之后再返回给客户端; ResponseBodyAdvice接口有两个方法&#xff0c…

一.SpringMVC统一返回值格式

1. ResponseBodyAdvice的简介 
ResponseBodyAdvice是在Controller执行return后,在response返回给前端之前将response拦截,在对response做处理之后再返回给客户端;

ResponseBodyAdvice接口有两个方法,在supperts()中我们可以控制哪些controller或controller中的哪些方法需要进行统一处理,只有supperts()返回true才会执行beforBodyWrite();我们会在beforeWrite()中对response进行处理。

示例如下:

/*** 全局统一返回结果类*/
public class GlobalResultHandler implements ResponseBodyAdvice<Object> {@Overridepublic boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {//获取控制器名称String name = Objects.requireNonNull(methodParameter.getMethod()).getName();List<String> list = Arrays.asList(name);return !list.contains(name);}@Overridepublic Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass,ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {return Result.ok(o);}
}

2.@RestControllerAdvice的简介

@RestControllerAdvice是一个组合注解,由@ControllerAdvice、@ResponseBody组成,而@ControllerAdvice继承了@Component,因此@RestControllerAdvice本质上是个Component

@RestControllerAdvice的特点:

(1)通过@ControllerAdvice会作用在所有注解了@RequestMapping的控制器的方法上。可以将对于控制器的全局配置放在同一个位置

(2)注解了@RestControllerAdvice的类的方法可以使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上。

        @ExceptionHandler:与@RestControllerAdvice配合使用时,用于全局处理控制器里的异常。value属性可以指定要拦截的异常类型

        @InitBinder:与@ControllerAdvice配合使用时,可以用来进行全局数据预处理;注解了@RequestMapping的方法在其执行之前初始化WebDataBinder(数据绑定器),让前台请求参数绑定到Model中

        @ModelAttribute:本来作用是绑定键值对到Model中,当与@ControllerAdvice配合使用时,可以让注解了@RequestMapping的方法都可以获得此键值对


 (3)@RestControllerAdvice可以通过属性指定Controller范围

@RestControllerAdvice(basePackages={"xxx.xxx"}):指定一个或多个包,这些包及其子包下的所有 Controller 都被该@ControllerAdvice 管理
@RestControllerAdvice(basePackageClasses={xxx.class}):指定一个或多个 Controller 类,这些类所属的包及其子包下的所有 Controller 都被该@ControllerAdvice 管理
@RestControllerAdvice(assignableTypes={xxx.class}):指定一个或多个 Controller 类,这些类被该@ControllerAdvice 管理
@ControllerAdvice(annotations = {XXXAnnotation.class}):指定一个或多个注解,被这些注解所标记的 Controller 会被该@ControllerAdvice 管理


二.总结

实体统一返回结果步骤如下:

(1)创建ResponseBodyAdvice的实现类,重写supperts()和beforBodyWrite()

(2)为该实现类加上@RestControllerAdvice注解,通过属性指定需要被@RestControllerAdvice管理的controller

(3)使用supperts()协助我们更加灵活的过滤需要进行统一返回处理的controller

(4)在beforBodyWrite()中进行统一返回处理

实现统一异常处理步骤如下:

(1)创建全局异常处理类

(2)为该实现类加上@RestControllerAdvice注解,通过属性指定需要被@RestControllerAdvice管理的controller

(3)创建异常处理方法,在该方法上添加@ExceptionHandler(XXX.class)来对指定异常进行异常处理;可以添加多个方法来对不同的异常进行不同的处理

最终代码:

/*** 统一返回模型*/
@Data
public class Result<T> {//状态码private Integer code;//信息private String message;//数据private T data;//构造私有化private Result() {}//设置数据,返回对象的方法public static <T> Result<T> build(T data, ResultCodeEnum resultCodeEnum) {//创建Resullt对象,设置值,返回对象Result<T> result = new Result<>();//判断返回结果中是否需要数据if (data != null) {//设置数据到result对象result.setData(data);}//设置其他值result.setCode(resultCodeEnum.getCode());result.setMessage(resultCodeEnum.getMessage());//返回设置值之后的对象return result;}//成功的方法public static <T> Result<T> ok(T data) {return build(data, ResultCodeEnum.SUCCESS);}//失败的方法public static <T> Result<T> fail(T data) {return build(data, ResultCodeEnum.FAIL);}
}
/*** 全局统一返回结果类and异常处理类*/
@RestControllerAdvice(basePackages = "com.atguigu.ssyx.controller")
public class GlobalResultHandler implements ResponseBodyAdvice<Object> {private final static Logger LOGGER = LogFactory.getFactory(GlobalResultHandler.class);@Overridepublic boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {//获取控制器名称String name = Objects.requireNonNull(methodParameter.getMethod()).getName();List<String> list = Arrays.asList(name);return !list.contains(name);}@Overridepublic Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass,ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {return Result.ok(o);}@ResponseStatus(HttpStatus.BAD_REQUEST)@ExceptionHandler(Exception.class)public Result<String> businessValidate(Exception e) {LOGGER.error("捕捉异常", e);return Result.fail(null);}
}

http://www.jmfq.cn/news/5207509.html

相关文章:

  • 兰州软件公司排名/上海城市分站seo
  • 做网站 创业/百度云盘资源搜索
  • 元做网站/seo推广软件
  • 做网站有多赚钱/七台河网站seo
  • 微官网和移动网站区别吗/苏州seo按天扣费
  • 长沙市疫情最新消息今天/学好seo
  • 二维码网页制作免费网站制作/深圳网站seo地址
  • 网站建设免费软件有哪些/女生做sem还是seo
  • 网站推广手段有哪些/什么是网络软文营销
  • 湖南城市建设技术学院官方网站/免费收录网站推广
  • 通辽做网站有没有/云南疫情最新情况
  • 网站建设合同解除函/baud百度一下
  • 河北建设厅网站没有注册/推广app赚钱
  • 莱州网站建设青岛华夏商务网/企业seo自助建站系统
  • 网站建设 优势/郑州竞价托管代运营
  • 做推广网站哪家好/佣金高的推广平台
  • 承接各类网站建设/东莞营销网站建设推广
  • 海外做代购去哪个网站/如何网站seo
  • 建设网站费用吗/专业做网站设计
  • 在网上做效果图网站/东莞seo建站投放
  • 网站安全建设 应用开发/郑州网站优化培训
  • 高端网站建设公司价格/兰州网络推广优化服务
  • 网站开发流程详细介绍/网络推广用什么软件好
  • 全国政府网站建设的规范/关键词排名关键词快速排名
  • 鄂州网站建设报价/旺道seo系统
  • 网页设计与制作第二版答案/整站seo定制
  • 网站建设素材收集通知/网络推广培训班哪家好
  • 河南第二建设集团有限公司网站/上海今日头条新闻
  • 商务类网站/抖音搜索seo
  • 做微信充值网站/山东16市最新疫情