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

杰讯山西网站建设wordpress搜索查询插件

杰讯山西网站建设,wordpress搜索查询插件,到做任务的网站上面推广粉象生,有专业做网站的Servlet的HttpResponse对象#xff0c;返回响应报文#xff0c;一般是这么写的#xff0c;通过输出流直接就可以将返回报文输出。 OutputStream out response.getOutputStream(); out.write(输出的内容); out.flush();在filter中如果发生异常#xff08;例如…Servlet的HttpResponse对象返回响应报文一般是这么写的通过输出流直接就可以将返回报文输出。 OutputStream out response.getOutputStream(); out.write(输出的内容); out.flush();在filter中如果发生异常例如请求参数不合法抛出异常信息的时候调用方收到的返回码和body都是Spring Cloud Gateway框架处理来处理的。这一节我们分析一下gateway的异常返回报文是怎么返回的并定义一个自己的异常返回报文格式。 一、先定义一个Filter直接抛出异常 定义一个直接抛出异常的filter public class ExceptionFilter implements GlobalFilter, Ordered {Override public MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {throw new IllegalArgumentException(参数不合法); }Override public int getOrder() {return 0; } }异常抛出如下图 json内容如下 {timestamp: 2023-08-28T03:55:02.38000:00,path: /hello-service/hello,status: 500,error: Internal Server Error,requestId: 0204dca5-1 }二、源码分析 上节我们分析了核心流程。在整个核心流程中我们并没有关注有异常的情况。 入口HttpWebHandlerAdapter调用的delegate实际上就是DefaultErrorWebExceptionHandler 代码如下 Override public MonoVoid handle(ServerHttpRequest request, ServerHttpResponse response) {//省略部分代码return getDelegate().handle(exchange).doOnSuccess(aVoid - logResponse(exchange)).onErrorResume(ex - handleUnresolvedError(exchange, ex)).then(Mono.defer(response::setComplete)); }进入DefaultErrorWebExceptionHandler的handle方法分析见注释 Override public MonoVoid handle(ServerWebExchange exchange) {MonoVoid completion;try {//正常的处理流程completion super.handle(exchange);}catch (Throwable ex) {completion Mono.error(ex);} //产生异常的情况由异常处理器来进行处理for (WebExceptionHandler handler : this.exceptionHandlers) {completion completion.onErrorResume(ex - handler.handle(exchange, ex));}return completion; }如果产生异常的情况由异常处理器来进行处理这个异常处理器是一个列表。 而异常处理器最核心的就是这个DefaultErrorWebExceptionHandler 其handle方法如下 Override public MonoVoid handle(ServerWebExchange exchange, Throwable throwable) {if (exchange.getResponse().isCommitted() || isDisconnectedClientError(throwable)) {return Mono.error(throwable);}this.errorAttributes.storeErrorInformation(throwable, exchange);ServerRequest request ServerRequest.create(exchange, this.messageReaders);return getRoutingFunction(this.errorAttributes).route(request).switchIfEmpty(Mono.error(throwable)).flatMap((handler) - handler.handle(request)).doOnNext((response) - logError(request, response, throwable)).flatMap((response) - write(exchange, response)); }跟到getRoutingFunction里面看看 Override protected RouterFunctionServerResponse getRoutingFunction(ErrorAttributes errorAttributes) {return route(acceptsTextHtml(), this::renderErrorView).andRoute(all(), this::renderErrorResponse); }最终跟到下面的这个方法renderErrorResponse从下面的截图可以看到error Map这个对象正是报文体的格式 如果我们想自定义一个异常响应的返回报文如下应该怎么弄呢 {returnCode: ERROR,errorMsg: 参数异常,body: null }我们实际上可以继承DefaultErrorWebExceptionHandler并且实现其renderErrorResponse方法就可以了。 可以看到DefaultErrorWebExceptionHandler是通过下面的方式注入到容器的如果我们也定义一个也注册到容器那么就会覆盖原有的实现 整体流程图如下 三、自定义异常处理器 1、定义一个产生异常的filter模拟产生异常 Slf4j public class ExceptionFilter implements GlobalFilter, Ordered {Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info(filter产生了异常);throw new IllegalArgumentException(参数不合法);}Overridepublic int getOrder() {return 0;} }2、自定义异常处理器 /*** 自定义异常处理器*/ public class CustomErrorWebExceptionHandler extends DefaultErrorWebExceptionHandler {public CustomErrorWebExceptionHandler(ErrorAttributes errorAttributes, WebProperties.Resources resources, ErrorProperties errorProperties, ApplicationContext applicationContext) {super(errorAttributes, resources, errorProperties, applicationContext);}Overrideprotected MonoServerResponse renderErrorResponse(ServerRequest request) {// 最终是用responseBodyMap来生成响应body的MapString, Object responseBodyMap new HashMap();// 这里和父类的做法一样取得DefaultErrorAttributes整理出来的所有异常信息MapString, Object error getErrorAttributes(request, getErrorAttributeOptions(request, MediaType.ALL));// 原始的异常信息可以用getError方法取得Throwable throwable getError(request);responseBodyMap.put(returnCode, my error code);responseBodyMap.put(errorMsg, throwable.getMessage());responseBodyMap.put(body, null);return ServerResponse// http返回码.status(HttpStatus.INTERNAL_SERVER_ERROR)// 类型和以前一样.contentType(MediaType.APPLICATION_JSON)// 响应body的内容.body(BodyInserters.fromValue(responseBodyMap));} }3、注册异常处理器 Configuration(proxyBeanMethods false) public class ExceptionHandlerConfig {private final ServerProperties serverProperties;public ExceptionHandlerConfig(ServerProperties serverProperties) {this.serverProperties serverProperties;}Beanpublic ErrorWebExceptionHandler errorWebExceptionHandler(ErrorAttributes errorAttributes,WebProperties webProperties, ObjectProviderViewResolver viewResolvers,ServerCodecConfigurer serverCodecConfigurer, ApplicationContext applicationContext) {CustomErrorWebExceptionHandler exceptionHandler new CustomErrorWebExceptionHandler(errorAttributes,webProperties.getResources(), this.serverProperties.getError(), applicationContext);exceptionHandler.setViewResolvers(viewResolvers.orderedStream().collect(Collectors.toList()));exceptionHandler.setMessageWriters(serverCodecConfigurer.getWriters());exceptionHandler.setMessageReaders(serverCodecConfigurer.getReaders());return exceptionHandler;} }4、请求效果
http://www.hkea.cn/news/14356775/

相关文章:

  • 南京网站建设多少钱个人怎么做淘宝客网站
  • 网站建设推广市场网上办卡
  • 织梦做的网站后台营销网站的优势有哪些
  • 昆明找工作哪个网站好网站开发设计资料
  • 龙华网站建设专业公司wordpress10万数据
  • 金融网站搭建php网站后台密码忘记了怎么办
  • 网站建设中的网页布局主要内容wordpress 本地ajax
  • 网站专题页面建设网站石家庄
  • 长沙网站建设及推广公司物流管理专业就业方向
  • 有什么做图片赚钱的网站买网站账号做推广
  • 医疗网站模板免费下载云南网站建设一条龙
  • 局域网建设简单的影视网站网站建设毕业设计开题ppt
  • 郑州做网站优化公网站怎么做才算精致
  • asp.net不适合做网站网站建设得多少钱
  • 国内的c2c网站有哪些免费行情软件网站大全网页版
  • 公司网站怎么做实名认证wordpress安装用户名密码
  • 做网站的软件叫什么网站建设属于劳务吗
  • 网站dns刷新克旗网站制作5229998
  • 成都市城乡建设厅官方网站公司网络搭建
  • 临沧网站建设临沧wordpress p=
  • 东莞网站建设网站建立wordpress. 评论插件
  • 企业网站城市分站系统用wordpress如何做网页
  • 加强网站信息建设管理吉林省建设厅官网查询
  • 如何用本机电脑做网站服务器seo外包公司一般费用是多少
  • 如何做好网站针对搜索引擎的seo网站建设客户需要提供什么
  • 网站遭攻击html代码翻译器
  • 免费网站安全软件下载安装制作网页时可以使用什么来实现动态效果
  • 广州市外贸网站建设重庆网站制作有哪些
  • 素材网站开发c语言程序设计网站
  • 哪个网站有免费ppt下载交通局网站模板