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

网站开发软件解决方案最专业的手机网站制作

网站开发软件解决方案,最专业的手机网站制作,wordpress三站合一,网站开发税收标准简介日常开发过程中#xff0c;难免有的程序会因为某些原因抛出异常#xff0c;而这些异常一般都是利用try #xff0c;catch的方式处理异常或者throw#xff0c;throws的方式抛出异常不管。这种方法对于程序员来说处理也比较麻烦#xff0c;对客户来说也不太友好#xf…简介日常开发过程中难免有的程序会因为某些原因抛出异常而这些异常一般都是利用try catch的方式处理异常或者throwthrows的方式抛出异常不管。这种方法对于程序员来说处理也比较麻烦对客户来说也不太友好所以我们希望既能方便程序员编写代码不用过多的自己去处理各种异常编写重复的代码又能提升用户的体验这时候全局异常处理就显得很重要也很便捷了是一种不错的选择。全网独家Spring/Cloud/MVC/Boot脑图面试进阶就问你服不服​zhuanlan.zhihu.com一、 全局异常捕获与处理Springboot对于异常的处理做了不错的支持它提供了两个可用的注解。ControllerAdvice用来开启全局的异常捕获ExceptionHandler说明捕获哪些异常对哪些异常进行处理。ControllerAdvice public class MyExceptionHandler {ExceptionHandler(value Exception.class)public String exceptionHandler(Exception e){System.out.println(发生了一个异常e);return e.getMessage();} }上面这段代码的意思是只要是代码运行过程中有异常就会进行捕获并输出出这个异常。然后我们随便编写一个会发生异常的代码测试出来的异常是这样的。这对于前后端分离来说并不好前后端分离之后唯一的交互就是json了我们也希望将后端的异常变成json返回给前端处理所以就需要统一结果返回和统一异常处理。二、统一结果返回与统一异常Result类封装返回结果。public class ResultT {private Integer code;//状态码private String message;//提示消息private T data;//数据public Result() {}/*** param code 响应码* param message 响应信息*/public Result(Integer code, String message) {this.code code;this.message message;}/*** param code 响应码* param message 响应信息* param data 数据*/public Result(Integer code, String message, T data) {this.code code;this.message message;this.data data;}/*** param resultEnum 自定义枚举类包含 code 和 message*/public Result(ResultEnum resultEnum) {this.code resultEnum.getCode();this.message resultEnum.getMessage();}/*** param resultEnum 自定义枚举类包含 code 和 message* param data 数据*/public Result(ResultEnum resultEnum, T data) {this.code resultEnum.getCode();this.message resultEnum.getMessage();this.data data;}/*** 自定义异常返回的结果* param definitionException 自定义异常处理类* return 返回自定义异常*/public static ResultObject defineError(DefinitionException definitionException) {return new Result(definitionException.getErrorCode(), definitionException.getErrorMessage());}/*** 其他异常处理方法返回的结果* param resultEnum 自定义枚举类包含 code 和 message* return 返回其他异常*/public static ResultObject otherError(ResultEnum resultEnum) {return new Result(resultEnum);}//这里写get和set方法 }注意其中省略了getset方法。ResultEnum自定义枚举类。public enum ResultEnum {// 数据操作定义SUCCESS(200, 成功),TIME_OUT(130, 访问超时),NO_PERMISSION(403, 拒绝访问),NO_AUTH(401, 未经授权访问),NOT_FOUND(404, 无法找到资源),METHOD_NOT_ALLOWED(405, 不支持当前请求方法),SERVER_ERROR(500, 服务器运行异常),NOT_PARAM(10001, 参数不能为空),NOT_EXIST_USER_OR_ERROR_PASSWORD(10002, 该用户不存在或密码错误),NOT_PARAM_USER_OR_ERROR_PASSWORD(10003, 用户名或密码为空);;/*** 响应码*/private final Integer code;/*** 响应信息*/private final String message;/*** 有参构造* param code 响应码* param message 响应信息*/ResultEnum(Integer code, String message) {this.code code;this.message message;}public Integer getCode() {return code;}public String getMessage() {return message;} }注意枚举类中定义了常见的错误码以及错误的提示信息。这里我们就定义好了统一的结果返回其中里面的静态方法是用来当程序异常的时候转换成异常返回规定的格式。DefinitionException自定义异常处理类。//ControllerAdviceResponseBody开启全局的异常捕获返回JSON RestControllerAdvice public class GlobalExceptionHandler {/*** 处理自定义异常* return Result* ExceptionHandler 说明捕获哪些异常对那些异常进行处理。*/ExceptionHandler(value DefinitionException.class)public ResultObject customExceptionHandler(DefinitionException e) {return Result.defineError(e);}/*** 处理其他异常* return Result*/ExceptionHandler(value Exception.class)public ResultObject exceptionHandler(Exception e) {return Result.otherError(ErrorEnum.INTERNAL_SERVER_ERROR);} }说明将对象解析成json是为了方便前后端的交互。三、代码测试与结果测试类ResultController测试的controller类RestController public class ResultController {//获取学生信息GetMapping(/student)public ResultStudent getStudent() {Student student new Student();student.setId(1);student.setAge(18);student.setName(XuWwei)return new Result(ResultEnum.SUCCESS, student);}//自定义异常处理RequestMapping(/getDeException)public ResultObject DeException() {throw new DefinitionException(400, 我出错了);}//其他异常处理RequestMapping(/getException)public Result Exception(){Result result new Result();int a1/0;return result;}Student学生类public class Student {/*** 唯一标识id*/private Integer id;/*** 姓名*/private String name;/*** 年龄*/private Integer age; }注意其中省略了getset方法。测试结果启动项目一个一个测试正常测试可以看到数据是正常返回json没有异常。自定义异常可以看到这个自定义的异常被捕获到了并且返回了一个json。其他异常可以看到这个异常被捕获到了并且返回了一个json。注意这种方法是不能处理404异常的捕获不到。四、404异常特殊处理1、修改配置文件​ 默认情况下SpringBoot是不会抛出404异常的所以**ControllerAdvice**也不能捕获到404异常。我们可以通过配置文件来让这个注解能捕获到404异常在application.properties中添加以下配置#当发现404异常时直接抛出异常 spring.mvc.throw-exception-if-no-handler-foundtrue #关闭默认的静态资源路径映射这样404不会跳转到默认的页面 spring.resources.add-mappingsfalse但是关闭默认的静态资源路径映射会让静态资源访问出现问题也就是不适合前后端一体的情况。但是我们可以手动配置静态资源路径映射就能正常访问静态资源了。Configuration public class ResourceConfig implements WebMvcConfigurer {Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {//可以访问localhost:8080/static/images/image.jpgregistry.addResourceHandler(/static/**).addResourceLocations(classpath:/static/);} }2、修改error跳转路径​ 关闭默认的静态资源路径映射显然不太合理可能会导致其他的错误发生所以也可以通过修改默认错误页面的跳转路径来达到我们的目的。在GlobalExceptionHandler类中添加NotFoundExceptionHandler类这个类继承了ErrorController可以重写error的跳转路径//处理404NotFoundException Controller class NotFoundExceptionHandler implements ErrorController {//设置错误页面路径Overridepublic String getErrorPath() {return /error;}//当访问error路径时返回一个封装的异常的JsonRequestMapping(/error)ResponseBodypublic ResultObject error() {return Result.otherError(ResultEnum.NOT_FOUND);} }五、拓展异常类​ GlobalExceptionHandler的exceptionHandler方法将所有的异常统一返回500系统错误这不符合我们的设想所以我们可以通过判断异常的类型来返回不同的值。将exceptionHandler改成以下代码/*** 处理其他异常* return Result*/ ExceptionHandler(value Exception.class) public ResultObject exceptionHandler(Exception e) {if (e instanceof NullPointerException){//捕获空指针异常return Result.otherError(ResultEnum.NOT_PARAM);}else if (e instanceof IllegalAccessException){//非法访问异常return Result.otherError(ResultEnum.NO_PERMISSION);} else{return Result.otherError(ResultEnum.SERVER_ERROR);} }注意更多异常可以通过else if来细分。六、总结​springboot的异常处理需要通过ControllerAdvice注解以及 ExceptionHandler注解来拦截所有的异常并通过一个封装返回值返回。但是这两个注解无法捕获404NotFound异常因为SpringBoot默认是不会抛出404异常的所以要通过继承ErrorController来修改404异常的跳转路径达到捕获404异常的目的。
http://www.zqtcl.cn/news/111532/

相关文章:

  • 网站和做游戏重庆市建设工程信息网安全监督特种人员
  • 沈阳网站建设活动方案部分网站打不开的原因
  • 网站维护界面设计做的网站一直刷新
  • 国外网站 国内访问速度土木工程毕业设计网站
  • 宿迁网站建设制作中国广告设计网
  • 上门做美容的有什么网站微信网页版本
  • 专门做餐饮运营的网站网站开发相关知识
  • 石家庄门户网站建设免费简历模板的网站
  • 微网站建设市场如何做好平台推广
  • 网站不备案做优化小程序开发前景怎么样
  • 美丽说网站优化百度关键词优化
  • 同性男做的视频网站赶集网招聘最新招聘附近找工作
  • 做挖机配件销售的网站oa办公系统软件哪家好
  • 聊城设计网站商务网站的特点
  • 厦门做个网站多少钱工程建设范围
  • 百度推广官方网站在哪里制作网页
  • 济南集团网站建设方案沈阳手机网站制作
  • 网站备案号注销的结果做网站的外包能学到什么
  • 在线购物网站开发项目网站建设电话推广话术
  • 网站主体信息太原站扩建
  • 西平县住房和城乡建设局网站空间商网站
  • p2p网站建设cms一键生成图片
  • 甘肃省第八建设集团公司网站能够做物理题的网站
  • 团购网站建设方案建筑工程网校官网
  • 佛山建站网站模板小公司管理方法
  • 常德住房和城乡建设局网站做风险代理案源的网站
  • 手机网站开发人员选项wordpress加载媒体库
  • 做钓鱼网站用哪种编程语言张家界有实力seo优化费用
  • 如何做一个主题网站做网站必须有框架么
  • 建设网站需要什么知识上海高端网页设计