首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring参数错误时输出Http内容

Spring应用中,后台需要拿到前端的请求参数,方便调试问题,一般都是使用Aop进行日志输出,但是在格式错误的时候就没有日志了。...问题 Spring应用中,一般使用Aop进行请求参数和返回值的日志输出,但是这里有一个前提,就是用户请求的参数一定好可以转换为方法参数,但是经常前端请求是一个错误的Json格式,参数转换失败,并不会进入...这就导致定位问题比较困难,所以后台需要一个更好的办法来输出请求参数。...难点:如果直接把HttpServletRequest中的InputStream读取后输出日志,会导致后续业务逻辑读取不到InputStream中的内容,因为流只能读取一次。...log.warn("fail to build http log", e); } finally { //这一行必须添加,否则就一直不返回

65910

skywalking展示http请求和响应

使用skywalking跟踪请求的时候,是看不到http请求的参数的,这样不方便定位问题。...本文通过自定义的方式(ActiveSpan.tag),实现了http请求和响应的输出,方便快速定位问题 效果图 可以在请求中看到自定义请求信息input和返回值output,方便快速定位问题 实现请求和响应的输出...scope> 使用ActiveSpan.tag输出到skywalking ActiveSpan.tag("input", sb.toString()); 实现http请求和返回值的的输出...因为HttpServletRequest和HttpServletResponse中的body只能读取一次,如果在Filte中读取的话,应用本身就读取不到,所以需要使用ContentCachingRequestWrapper...responseWrapper.copyBodyToResponse(); } } } } 参考 skywalking搭建 Spring参数错误时输出Http内容

3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    微系列:8、在Centos系统中,搭建Skywalking服务

    整个系统分为三部分: agent:采集tracing(调用链数据)和metric(指标)信息并上报 OAP:收集tracing和metric信息通过analysis core模块将数据放入持久化容器中(...做负载均衡转发给OAP集群,再将查询结果渲染展示 搭建Skywalking环境,一共需要四个步骤: 1、搭建持久化环境; 2、配置Skywalking服务; 3、搭建Skywalking可视化平台; 4、在对于的客户端中配置...SW_STORAGE_MAX_SIZE_OF_BATCH_SQL:2000} asyncBatchPersistentPoolSize: ${SW_STORAGE_ASYNC_BATCH_PERSISTENT_POOL_SIZE:4} 这里如果直接访问...skywalking-oap \ -e SW_OAP_ADDRESS=skywalking-oap:12800 \ -d apache/skywalking-ui 同样要注意几点: 需要配置上skywalking...ui的版本也尽量和oap的版本统一。 最后的效果如图: 目前还没有任何数据,接下来需要在Client客户端中配置代理探针。

    1.3K20

    从Reactor到WebFlux

    观察者模式 反应式编程和命令式编程在迭代器上的实现: 事件 Iterable (pull) Observable (push) 获取数据 T next() onNext(T) 发现异常 throws Exception...异步调用结果创建 如果异步得到结果,比如CompletableFuture可以创建一个Mono: Mono.fromFuture(completableFuture); 如果这个异步调用不返回CompletableFuture...数据处理方式 then 是下一步意思,代表执行顺序的下一步,不表示下一步依赖于上一步。then方法参数只是一个Mono,入参不是上一步的执行结果。...WebFlux Serverlet3.1支持了异步处理方式,Servlet线程不需要一直阻塞的等待任务执行。Servlet在接收到请求后,将请求委托给业务线程完成,自己则直接返回继续接收新的请求。...实践建议 在使用lambda写处理函数时,如果多个处理函数可能缺乏可读性且不易于维护。可以将相关处理函数分组到一个处理程序或控制器类中。

    4.7K11

    聊聊如何利用kafka实现请求-响应模式

    Spring Kafka 中的一个高级特性,专门用于处理 Kafka 中的请求/响应模式。...*状态查询:* 如果一个服务需要定期或按需查询另一个服务的状态,但又不希望阻塞主线程等待响应,可以使用此模板。...@SendTo转发回去在官网贴了这么一段话他的大意是为了支持@SendTo,侦听器容器工厂必须提供一个KafkaTemplate(在其replyTemplate属性中),用于发送回复。...* 使用场景:当你的应用作为服务端,需要对某个主题上的消息做出响应时,可以在处理该消息的方法上使用此注解来指定响应消息的目标主题。...https://docs.spring.io/spring-kafka/reference/kafka/receiving-messages/annotation-send-to.html进行了解5、写个测试控制器这个控制器的作用就是客户端发起

    8400

    SkyWalking集成与案例

    SkyWalking:国人开源的产品,2019 年 4 月 17 日 SkyWalking 从 Apache 基金会的孵化器毕业成为顶级项目。...目前,SkyWalking 增长势头强劲,社区活跃,中文文档齐全,没有语言障碍,支持多语言探针,这些都是 SkyWalking 的优势所在,还有就是 SkyWalking 支持很多框架,包括很多国产框架...一个是负责接收 Agent 上报上来的 Trace、Metrics 等数据,交给 Analysis Core (涉及 SkyWalking OAP 中的多个模块)进行流式分析,最终将分析得到的结果写入持久化存储中...另一个是负责响应 SkyWalking UI 界面发送来的查询请求,将前面持久化的数据查询出来,组成正确的响应结果返回给 UI 界面进行展示。...模板; 2、 VUE项目要根据实际情况,做sw服务的nginx的反向代理配置; 3、 skywalking如果遇到问题,可以优先升级最新版本;

    1.4K30

    SpringMVC基础详解

    如果使用restful风格的请求路径,在控制器中应该如何获取请求中的数据呢?...如果请求中缺少对应的参数,则会抛出异常 可以将其设置为false,false表示不是必须的,如果请求中缺少对应的参数,则方法的参数为null 举例 添加了一个 age 形参,没有指定 required...,则和 springmvc.xml 文件中配置的视图解析器没有关系,不走视图解析器了 2.2、@ResponseBody注解方式 这里的"hello"不是逻辑视图名了,而是作为响应体的内容进行响应。...提供对HTTP响应的全方位控制,包括设置状态码、响应头和响应体 默认只返回body的内容作为响应体,不是完整的ResponseEntity对象(包括状态码和头部) 6.1、返回字符串 如果ResponseEntity...过滤器更注重在请求和响应的流程中进行处理,可以修改请求和响应的内容,例如设置编码和字符集、请求头、状态码等 拦截器则更加侧重于对控制器进行前置或后置处理,在请求到达控制器之前或之后进行特定的操作,例如打印日志

    17710

    Spring Boot从零入门6_Swagger2生成生产环境中REST API文档

    3.2.3 启动服务并验证 当完成Swagger2的配置类时,启动WEB服务,通过http://localhost:8080/v2/api-docs就可以访问生成文档内容,但是浏览器返回的是JSON内容...4.3 API分组配置、API精细配置 4.3.1 API分组展示 上面的文档信息配置中默认是没有对API分组的,即所有的API都展示在了一个页面,没有隔离,如果需要分组,那我们需要对不同API组分配Bean...这些都是通过注解去实现的,接下来我们讲述常用的注解及作用: @Api : 将这个注解添加到控制器类上,则可以给控制器添加描述类信息: 相关可设置参数有: value:用作承载资源的API声明的“路径”,...@ApiIgnore: 作用在REST API控制器方法上,则该API不会被显示出来: @ApiIgnore @RequestMapping(value = "/users/{id}", method...@Deprecated: 作用于控制器方法上,标注该方法已经过时,建议开发者采用新的方式之类的。

    2.2K20

    Spring MVC注解Controller源码流程解析--HandlerAdapter执行流程--上

    无论是URL的精确匹配还是模糊匹配,最终都要交给对应的HandlerMethod持有的RequestMappingInfo,进行条件匹配,如果不满足,则返回null。...如果没有HandlerMethod能够处理当前请求,那么再判断是否部分匹配,即请求路径匹配上了,但是不满足RequestMappingInfo中其他限制条件,如请求头限制等,此时检查不满足条件的请求,抛出对应的异常...如果是URL没有匹配上,则返回给AbstractHandlerMapping的handler结果为null,最终在doDispatch方法中的noHandlerFound方法中抛出404异常。...,需要求助Spirng提供的类型转换模块支持) 反射执行控制器方法,将先前准备好的参数值列表传入 控制器方法执行完毕后,处理返回结果,并将返回结果统一转换为ModelAndView,供SpringMVC...后续视图渲染组件使用 ---- 方法参数解析器 对于控制器方法参数解析而言,由于Spring支持多种注解形式来提示从哪里获取参数值,参数key是什么等等,因此如果使用一个参数解析器完成所有注解的解析

    78830

    Spring MVC用ResponseEntity返回可实现更强大的功能

    User user = new User(); user.setUsername("felord.cn"); return user; } 等同于使用ResponseEntity作为控制器接口的返回值...自定义响应码 上面的ResponseEntity.ok已经包含了返回200Http响应码,我们还可以通过ResponseEntity.status(HttpStatus|int)来自定义返回的响应码。...大致原理 我们来看一个用来处理Spring MVC控制器接口返回值的抽象接口HandlerMethodReturnValueHandler: public interface HandlerMethodReturnValueHandler...HttpEntityMethodProcessor就是处理返回类型为HttpEntity的控制器方法的处理器。...针对下载它有两种模式: inline表示在浏览器直接展示文件内容;attachment表示下载为文件。另外下载后的文件名也在这里指定,请不要忘记文件扩展名,例如这里application.yml。

    4.3K20

    SpringMVC 与 REST.

    实际上,这里根本就没有模型,也没有视图,只有控制器产生的数据,以及消息转换器(message converter)转换数据之后所产生的资源表述。    ...它将会告知Spring,我们将要返回的对象作为资源发送给客户端,并将其转换为客户端可接受的形式。 @RequestBody:告诉Spring查找一个消息转换器,将来自客户端的资源表述转换为对象。...@RestController:如果在控制器类上使用@RestController来代替@Controller的话,Spring将会为该控制器的所有处理方法应用消息转换功能。...@ResponseStatus:指定返回的状态码。 @ResponseEntity:作为@ResponseBody的替代方案,控制器方法可以返回一个ResponseEntity对象。...-- exchange() :在URL上执行特定的HTTP方法,返回包含对象的ResponseEntity,这个对象是从响应体中映射得到的。

    1.2K40

    Spring MVC用ResponseEntity返回可实现更强大的功能

    User user = new User(); user.setUsername("felord.cn"); return user; } 等同于使用ResponseEntity作为控制器接口的返回值...自定义响应码 上面的ResponseEntity.ok已经包含了返回200Http响应码,我们还可以通过ResponseEntity.status(HttpStatus|int)来自定义返回的响应码。...大致原理 我们来看一个用来处理Spring MVC控制器接口返回值的抽象接口HandlerMethodReturnValueHandler: public interface HandlerMethodReturnValueHandler...HttpEntityMethodProcessor就是处理返回类型为HttpEntity的控制器方法的处理器。...针对下载它有两种模式: inline表示在浏览器直接展示文件内容;attachment表示下载为文件。另外下载后的文件名也在这里指定,请不要忘记文件扩展名,例如这里application.yml。

    2.9K20

    抛弃Servlet API和Postman开发RESTful

    Spring WebFlux就是基于Reactor实现的,其中Flux名称就是来自Reactor中的Flux类,WebFlux包括了对反应式HTTP、服务器推送事件(SSE:Server Send Event...> hello() { return Mono.just("Hello WebFlux"); } } 查看该类代码,不难发现该控制器类与Spring MVC应用的控制器类非常相似...,它们同样使用@Controller或@RestController注解来修饰控制器类、同样使用@RequestMapping或其变体注解修饰处理方法;区别只是处理方法的返回值,WebFlux应用的控制器的返回值类型是...提示 使用Map模拟内存中的数据库在学习控制器层和Service层开发时很有用,因为这样可以避免涉及数据库开发,从而更好地聚焦正在学习的内容。...从服务器响应即可看出,id为1的Item对象不再存在。 上面4个处理方法返回的都是包含单个数据的Mono对象,当服务器相应是多项数据时,可使用Flux返回值来定义发布者。

    1.8K20

    Spring Boot REST API错误处理指南

    以下是该程序实现的端点URL: GET /birds/{birdId} 获取鸟的相关信息,如果没有找到,则抛出异常。...此注解将作为处理此控制器中抛出的异常的入口点。总而言之,最常见的方法是在@ControllerAdvice类的方法上使用@ExceptionHandler,以便将异常处理应用于全局或控制器的子集。...ControllerAdvice是Spring 3.2中引入的注解,顾名思义,它是多控制器的“建议”。它使得单个ExceptionHandler应用于多个控制器上。...如果没有提供选择器,则ControllerAdvice将应用于全局所有的控制器。...这意味着如果我们的服务只是调用这个方法并直接返回给控制器,那么即使找不到资源,我们也会得到HTTP返回码200(OK)。

    3.3K20

    Spring Cloud 之 Gateway.

    客户端的请求先经过 “pre” 类型的 filter,然后将请求转发到具体的业务服务,收到业务服务的响应之后,再经过“post”类型的filter处理,最后返回响应到客户端。...通过实现 GlobalFilter 接口来自定义 Gateway 的全局过滤器;通过实现 Ordered 接口或者使用 @Order 注解来定义过滤器的执行顺序,执行顺序是从小到大执行,较高的值被解释为较低的优先级...然后,接下来我们要做的,就是把局部过滤器配置在需要的路由上,根据 SpringBoot 约定大于配置的思想,我们只需要配置 PreGatewayFilterFactory.java 中,前面的参数就行了...(() -> Mono.just(ResponseEntity.created(URI.create("/routes/"+id)).build()) ));..., t -> Mono.just(ResponseEntity.notFound().build())); } /*---省略后面代码---*/ } 要创建一个路由,发送POST请求

    1.3K30

    Spring Cloud Gateway动态路由实现

    如果添加的路由配置不能够落地,就会在网关重启之后丢失,这样明显没法实现稳定的动态路由。...(Mono.just(id)) .then(Mono.defer(() -> Mono.just(ResponseEntity.ok().build())))...如果你仔细的阅读源码,你会发现/actuator/gateway/routes这个接口获取的是routeDefinitionLocator中的路由配置,routeDefinitionLocator的类型是...,我们没有办法保存它 2、删除只能删除通过接口增加的路由配置,配置文件中定义的不能删除 自定义路由配置存储 我们需要自定义自己的路由存储,统一管理,全部路由配置都放在一起,除了一个默认的路由用于最后的默认拦截...,因为我们的路由配置是统一的管理,同一份配置对应的是n个Gateway节点,增删需要额外的统一操作,对于路由的获取根据Event事件加载,这是因为修改了路由配置并不是需要立即发布到运行环境中,可能还需要在某一个测试节点上验证过后在统一的进行上线

    2.6K20
    领券