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

哪个网站有免费的模板信誉好的镇江网站优化

哪个网站有免费的模板,信誉好的镇江网站优化,如何与网站建立私密关系,硬件优化大师下载1.统一数据返回格式 强制登录案例中, 我们共做了两部分⼯作 1. 通过Session来判断⽤户是否登录 2. 对后端返回数据进⾏封装, 告知前端处理的结果&#xff08;设置status401等&#xff09; 回想我们在给前端返回时进行了一个统一的数据包装 Data public class Result<T&g…

1.统一数据返回格式

强制登录案例中, 我们共做了两部分⼯作

1. 通过Session来判断⽤户是否登录

2. 对后端返回数据进⾏封装, 告知前端处理的结果(设置status401等)

回想我们在给前端返回时进行了一个统一的数据包装

@Data
public class Result<T> {private int status;//1.  200成功   2. -1未登录 3. -2  异常private String errorMsg;//错误信息private T data;/*** 登录成功* @param data* @param <T>* @return*/public static <T> Result success(T data) {Result result = new Result();result.setStatus(ResultStatus.SUCCESS.getCode());result.setErrorMsg("");result.setData(data);return result;}/*** 未登录* @return*/public static Result unLogin() {Result result = new Result();result.setErrorMsg("未登录,请登录后访问");result.setStatus(ResultStatus.UNLOGIN.getCode());return result;}/*** 登录失败* @param data* @param <T>* @return*/public static <T> Result fail(String msg) {Result result = new Result();result.setErrorMsg(msg);result.setStatus(ResultStatus.FAIL.getCode());result.setData("");return result;}
}

如果能将返回的数据全部都包装为Result那么代码就更加健壮了(方便后续的添加修改)

参考拦截器,我们肯定不会对原来的方法返回结果直接一个一个修改。

SpringBoot也对此功能进行了支持

使用方法:

统⼀的数据返回格式使⽤ @ControllerAdvice ResponseBodyAdvice 的⽅式实现 

@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, 
MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest 
request, ServerHttpResponse response) {return Result.success(body);}
}

 

@ControllerAdvice注解已经包含五大注解,会交给Spring进行管理

这个类有两个方法:supports(),beforeBodyWrite()

supports():判断是否要执⾏beforeBodyWrite⽅法. true为执⾏, false不执⾏

可以通过参数获取类及方法书写逻辑:

    @Overridepublic boolean supports(MethodParameter returnType, Class converterType) {//获取执行方法的类Class<?> declaringClass = returnType.getMethod().getDeclaringClass();//获取执行的方法Method method = returnType.getMethod();//判断是否执行beforeBodyWrite方法   true--执行  false--不执行return true;}

 beforeBodyWrite(): 对response⽅法进⾏具体操作处理

 在这里是将返回数据包装后返回给前端

但是这里如果直接对String进行包装返回会出现错误:

写一个测试类:

@RestController
@RequestMapping("/test")
public class TestController {@RequestMapping("/t1")public String t1() {return "t1";}@RequestMapping("/t2")public Integer t2() {return 2;}@RequestMapping("/t3")public Boolean t3() {return true;}
}

而其他类型不会出现这种情况。出现这种情况是在源码阶段的类型不匹配(这里不进行深究)

解决方法是将返回的Result转换成Spring类型。

         private static ObjectMapper mapper = new ObjectMapper();        if(body instanceof String) {//将result类型转化为String类型   否则在源码阶段会出现类型不匹配return  mapper.writeValueAsString(Result.success(body));}

如果返回的类型就是Result则不用转换,直接返回

        //如果body是Result类型就直接返回if(body instanceof Result) {return body;}

 最终代码:

/*** 统一结果返回*/
@Slf4j
@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {private static ObjectMapper mapper = new ObjectMapper();@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {//获取执行方法的类Class<?> declaringClass = returnType.getMethod().getDeclaringClass();//获取执行的方法Method method = returnType.getMethod();//判断是否执行beforeBodyWrite方法   true--执行  false--不执行return true;}@SneakyThrows@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {//判断body是否是String类型if(body instanceof String) {//将result类型转化为String类型   否则在源码阶段会出现类型不匹配return  mapper.writeValueAsString(Result.success(body));}//如果body是Result类型就直接返回if(body instanceof Result) {return body;}return Result.success(body);}
}

2.统一异常处理

在上一步统一结果返回时,如果类型不匹配,并没有爆出异常(最外层显示200),这是我们不能接收的。

我们当然可以对每一块代码进行trycacth环绕,但同样面临冗余的情况。

解决方法是:统一异常处理

统⼀异常处理使⽤的是 @ControllerAdvice + @ExceptionHandler 来实现的

@ControllerAdvice 控制器通知类(标识作用), @ExceptionHandler 是异常处理器,两个结合表⽰当出现异常的时候执⾏某个通知,也就是执⾏某个⽅法事件

记得加: @ResponseBody

/*** 统一异常处理*/
//接⼝返回为数据时, 需要加 @ResponseBody 注解
@ControllerAdvice
@ResponseBody
public class ErrorAdvice {@ExceptionHandlerpublic Object handler(Exception e) {return Result.fail(e.getMessage());}
}

如果代码出现Exception异常(包括Exception的⼦类), 就返回⼀个 Result的对象, Result 对象的设置参考 Result.fail(e.getMessage())

    public static <T> Result fail(String msg) {Result result = new Result();result.setErrorMsg(msg);result.setStatus(ResultStatus.FAIL.getCode());result.setData("");return result;}

当然,只能爆Exception这么宽泛的异常就没有意义了

我们可以针对不同的异常, 返回不同的结果

@ExceptionHandlerpublic Object handler(Exception e) {return Result.fail(e.getMessage());}//空指针异常@ExceptionHandlerpublic Object handler(NullPointerException e) {return Result.fail(e.getMessage());}//算数异常@ExceptionHandlerpublic Object handler(ArithmeticException e) {return Result.fail(e.getMessage());}

现在我们在测试类中添加两个异常观察一下:

    @RequestMapping("/t1")public String t1() {String s = "1";char a = s.charAt(2);return "t1";}@RequestMapping("/t2")public Integer t2() {int s = 10/0;return 2;}

它会抛出距离最近的异常

针对不同的异常, 返回不同的结果还有一种写法:

    //算数异常@ExceptionHandler(ArithmeticException.class)public Object handler1(Exception e) {return Result.fail(e.getMessage());}@ExceptionHandler(NullPointerException.class)public Object handler2(Exception e) {return Result.fail(e.getMessage());}@ExceptionHandler(Exception.class)public Object handler3(Exception e) {return Result.fail(e.getMessage());}

将异常加在注解中


文章转载自:

http://UlBrgtuN.grbgn.cn
http://2tlYTXJr.grbgn.cn
http://MdKvvIZz.grbgn.cn
http://XTjRMRn7.grbgn.cn
http://4URk1E6t.grbgn.cn
http://Ei28Gr95.grbgn.cn
http://0X08C71T.grbgn.cn
http://6gz2l6iN.grbgn.cn
http://ZOr7jYYH.grbgn.cn
http://lReopft3.grbgn.cn
http://SHAcXodh.grbgn.cn
http://I8CdB3K3.grbgn.cn
http://Bu7mjuY7.grbgn.cn
http://K0gOKEzZ.grbgn.cn
http://yqAkV0MY.grbgn.cn
http://Plv5LpU6.grbgn.cn
http://KGHor8LU.grbgn.cn
http://hLT4u0OJ.grbgn.cn
http://oX5QG4ER.grbgn.cn
http://f65lfhgT.grbgn.cn
http://h3aCywmm.grbgn.cn
http://hcQNzAPG.grbgn.cn
http://SXfHzdXt.grbgn.cn
http://yMF0I6Eh.grbgn.cn
http://EcBLrBRE.grbgn.cn
http://1sTaUG2W.grbgn.cn
http://SxYkMi8x.grbgn.cn
http://QiUpKjV8.grbgn.cn
http://MEOtWcaT.grbgn.cn
http://7lPs0pps.grbgn.cn
http://www.dtcms.com/wzjs/641053.html

相关文章:

  • 台州房产网站建设网站建设教程 项目式
  • 网站上上传图片 怎么做wordpress注册没有密码
  • 本地工程招标网权威seo技术
  • 做网站软件要钱吗电子商务平台经营者有哪些义务
  • 一个网站要多大的空间科学新概念seo外链
  • 购物商城图片网站栏目优化
  • 洛阳网站推广优化万网封停慧聪张向东复仇
  • 网站页面模板公司官网怎么设计
  • 生物科技公司网站模板那个网站专利分析做的好
  • 网页微信怎么登录上海优化排名推广
  • 怎么在后台设计网站广州做网站公司排名
  • 公司的服务器能建设网站吗京icp备案查询
  • 百度商桥代码后网站上怎么不显示网站制作商城
  • 湖南竞网做网站好吗营销管理网站
  • 网页制作与设计答案无锡做网站优化公司
  • 青海省公路建设市场信用信息服务网站邵东平台网站建设
  • 湖南网站推广建设公司seo门户网站优化
  • 做网站如何接单子电子商务的分类
  • 社区网站建设费用网络产品营销策划方案
  • 焦作市建设工程网站平面设计工作室网站
  • 如何建立网站数据库连接网站换一家做还用备案么
  • Wordpress百万数据查询多久郑州seo外包公司哪家好
  • 电商支付网站建设费进什么科目凡科快图是免费的吗
  • 网站建设技术服务协议济南seo网站排名关键词优化
  • 贵州省建设厅网站多少视频拍摄策划方案
  • 科技网站设计公司学管理培训班去哪里学
  • 做资讯网站需要什么资质品质好的深圳装修
  • 想自己做一个网站应该怎么弄施工企业合规管理检查制度
  • 什么是网站后台建设做网站找浩森宇特
  • 网站建设必须要服务器么有哪些网站是用php做的