首页 > 其他分享 >spring boot 使用webflux全局拦截,类似404错误

spring boot 使用webflux全局拦截,类似404错误

时间:2022-11-16 17:14:44浏览次数:42  
标签:Map return spring boot request 404 拦截 errorAttributes webflux

背景

要拦截类似404这种返回,添加日志返回码。所以要全局拦截404或者500返回

实现

1. 定义拦截类

package com.cmb.zhaohu.WebLogCollect.advice;import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @描述: 全局异常处理
 */
@Component
public class RestExceptionHandler extends DefaultErrorAttributes { public Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) { return assembleError(request); } private Map<String, Object> assembleError(ServerRequest request) { Map<String, Object> errorAttributes = new LinkedHashMap<>(); Throwable error = getError(request); if (error.getMessage().contains("404")) { errorAttributes.put("code", HttpStatus.NOT_FOUND); errorAttributes.put("data", error.getMessage()); } else { errorAttributes.put("code", HttpStatus.INTERNAL_SERVER_ERROR); errorAttributes.put("data", "INTERNAL SERVER ERROR"); } return errorAttributes; } }

2. 拦截返回

import reactor.core.publisher.Mono;

import java.util.Map;

/**
 * @描述: 
 */
@Component
@Order(-2)
public class GlobalErrorWebExceptionHandler extends AbstractErrorWebExceptionHandler {
    public GlobalErrorWebExceptionHandler(ErrorAttributes errorAttributes, ResourceProperties resourceProperties, ApplicationContext applicationContext) {
        super(errorAttributes, resourceProperties, applicationContext);
        ServerCodecConfigurer serverCodecConfigurer = new DefaultServerCodecConfigurer();
        super.setMessageWriters(serverCodecConfigurer.getWriters());   
        //    super.setMessageReaders(serverCodecConfigurer.getReaders());  
         }    
        // 构造函数    
        @Override
        protected RouterFunction<ServerResponse> getRoutingFunction(final ErrorAttributes errorAttributes) {
            return RouterFunctions.route(RequestPredicates.all(), this::renderErrorResponse);
        }

    private Mono<ServerResponse> renderErrorResponse(final ServerRequest request) {
        final Map<String, Object> errorPropertiesMap = getErrorAttributes(request, true);
        return ServerResponse.status(HttpStatus.OK).
                contentType(MediaType.APPLICATION_JSON_UTF8).body(BodyInserters.fromObject(errorPropertiesMap));
    }
}

结果:

如果请求404,会直接返回code和msg。

 

标签:Map,return,spring,boot,request,404,拦截,errorAttributes,webflux
From: https://www.cnblogs.com/fyy151617/p/16896543.html

相关文章

  • Bootstrap概述、快速入门
    Bootstrap概述概念:一个前端开发的框架,Bootstrap,来自Twitter,是目前很受欢迎的前端框架。Bootstrap是基于HTML,CSS,JavaScript的,它简洁灵活,使得Web开发更加快捷框架:一个......
  • SpringMVC自定义参数解析器
    SpringMVC自定义参数解析器 一、问题描述前端把token存放在请求头里面,后端接口如果需要获取当前登录用户信息,我们是使用HttpServletRequest来获取请求头的token......
  • SpringBoot源码解析
    1.创建SpringApplication对象1.1webApplicationType设置(SERVLET)1.2setInitializers设置通过getSpringFactoriesInstances方法从META-INF/spring.factories下获取k......
  • springboot 事务Transactional使用小技巧
    springboot事务Transactional使用小技巧使用场景:我们在处理业务时会有这样的需求:我们需要在业务中需要调用远程的RPC接口,或者调用MQ发送消息,如果一切正常那自然皆大欢喜......
  • 关于SpringBoot项目中Jar包使用外部配置文件的问题
     SpringBoot项目的jar包在有外部配置文件的情况下会优先调用外部配置文件外部配置文件的优先级依次是执行命令的目录下的config目录(jar包同一目录下的config目录)jar包......
  • Spring 框架的核心技术(四)
    3.7.JavaBean验证Spring框架提供了对JavaBeanValidationAPI的支持。3.7.1.Bean验证概述Bean验证通过约束声明和Java应用程序的元数据。若要使用它,请使用然后由......
  • Spring 框架的核心技术(二)
    1.9.基于注释的容器配置在配置Spring方面,注释是否比XML更好?基于注释的配置的引入提出了一个问题,即这是否方法比XML“更好”。简短的回答是“视情况而定”。长答案是......
  • springboot openfeign服务端与客户端调用演示demo
    文章目录​​serverdemo演示​​​​创建server项目​​​​application.properties配置​​​​importjar[pom.xml]​​​​创建服务端的restfulcontroller​​​​验......
  • SpringBoot 2学习笔记(二)
    45、web实验-抽取公共页面官方文档-TemplateLayout公共页面/templates/common.html <!DOCTYPEhtml> <htmllang="en"xmlns:th="http://www.thymeleaf.org">......
  • SpringBoot 2学习笔记(一)
    01、基础入门-SpringBoot2课程介绍SpringBoot2核心技术SpringBoot2响应式编程学习要求-熟悉Spring基础-熟悉Maven使用环境要求Java8及以上Maven......