【问题标题】:org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public org.springframework.http.ResponseEntityorg.springframework.http.converter.HttpMessageNotReadableException:缺少所需的请求正文:公共 org.springframework.http.ResponseEntity
【发布时间】:2017-12-02 11:32:24
【问题描述】:

@RequestBody 用户用户 我有一个读取请求正文的拦截器,我看到 Http Servlet 请求在读取一次后从 POST 正文中丢失了参数。这里 Http Servlet request lose params from POST body after read it once 只能读一次 如何使所有请求(正文)可缓存,以便使用spring boot可以多次读取?


INFO  c.h.c.i.IncomingRequestLoggingInterceptor - [CLIENT REQUEST] method='POST' uri='/unregistertoken' query='null' body='{"parma1":"test","param2":"test"}'
2017-06-28 15:18:36.918 (-07:00) default [http-nio-7443-exec-4] DEBUG o.s.web.cors.DefaultCorsProcessor - Skip CORS processing: request is from same origin
2017-06-28 15:18:36.919 (-07:00) default [http-nio-7443-exec-4] TRACE o.s.w.m.s.HandlerMethodArgumentResolverComposite - Testing if argument resolver [org.springframework.web.method.annotation.RequestParamMethodArgumentResolver@7733f9cf] supports [class com.ews.appws.application.repository.paymentRepo.UnRegisterTokenRequest]
2017-06-28 15:18:36.920 (-07:00) default [http-nio-7443-exec-4] TRACE o.s.w.m.s.HandlerMethodArgumentResolverComposite - Testing if argument resolver [org.springframework.web.method.annotation.RequestParamMapMethodArgumentResolver@a2a23a] supports [class com.ews.appws.application.repository.paymentRepo.UnRegisterTokenRequest]
2017-06-28 15:18:36.920 (-07:00) default [http-nio-7443-exec-4] TRACE o.s.w.m.s.HandlerMethodArgumentResolverComposite - Testing if argument resolver [org.springframework.web.servlet.mvc.method.annotation.PathVariableMethodArgumentResolver@423a8bf5] supports [class com.ews.appws.application.repository.paymentRepo.UnRegisterTokenRequest]
2017-06-28 15:18:36.920 (-07:00) default [http-nio-7443-exec-4] TRACE o.s.w.m.s.HandlerMethodArgumentResolverComposite - Testing if argument resolver [org.springframework.web.servlet.mvc.method.annotation.PathVariableMapMethodArgumentResolver@2627aff1] supports [class com.ews.appws.application.repository.paymentRepo.UnRegisterTokenRequest]
2017-06-28 15:18:36.920 (-07:00) default [http-nio-7443-exec-4] TRACE o.s.w.m.s.HandlerMethodArgumentResolverComposite - Testing if argument resolver [org.springframework.web.servlet.mvc.method.annotation.MatrixVariableMethodArgumentResolver@1c17a17] supports [class com.ews.appws.application.repository.paymentRepo.UnRegisterTokenRequest]
2017-06-28 15:18:36.920 (-07:00) default [http-nio-7443-exec-4] TRACE o.s.w.m.s.HandlerMethodArgumentResolverComposite - Testing if argument resolver [org.springframework.web.servlet.mvc.method.annotation.MatrixVariableMapMethodArgumentResolver@195780b9] supports [class com.ews.appws.application.repository.paymentRepo.UnRegisterTokenRequest]
2017-06-28 15:18:36.920 (-07:00) default [http-nio-7443-exec-4] TRACE o.s.w.m.s.HandlerMethodArgumentResolverComposite - Testing if argument resolver [org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor@13cc4046] supports [class com.ews.appws.application.repository.paymentRepo.UnRegisterTokenRequest]
2017-06-28 15:18:36.920 (-07:00) default [http-nio-7443-exec-4] TRACE o.s.w.m.s.HandlerMethodArgumentResolverComposite - Testing if argument resolver [org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor@3a59edcb] supports [class com.ews.appws.application.repository.paymentRepo.UnRegisterTokenRequest]
2017-06-28 15:18:36.939 (-07:00) default [http-nio-7443-exec-4] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Read [class com.ews.appws.application.repository.paymentRepo.UnRegisterTokenRequest] as "application/json;charset=UTF-8" with [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@36d1321]
2017-06-28 15:18:36.941 (-07:00) default [http-nio-7443-exec-4] DEBUG o.s.w.s.m.m.a.ServletInvocableHandlerMethod - Failed to resolve argument 0 of type 'com.ews.appws.application.repository.paymentRepo.UnRegisterTokenRequest'
org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public org.springframework.http.ResponseEntity<org.springframework.http.ResponseEntity<java.lang.String>> com.ews.appws.application.controller.CoreWebserviceController.unregistrerToken(com.ews.appws.application.repository.paymentRepo.UnRegisterTokenRequest) throws com.fasterxml.jackson.core.JsonProcessingException
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:154)

【问题讨论】:

    标签: spring caching interceptor


    【解决方案1】:

    您不能多次读取请求,因为您加载了正文以便使用它。另一种可能的解决方案是将这个请求分成两个单独的请求。第一个是拦截器,它会做一些事情,在这些事情之后它将请求发送到第二个私有 API。
    p.s.为什么你需要先阅读请求?

    【讨论】:

      猜你喜欢
      • 2019-09-09
      • 1970-01-01
      • 2019-10-01
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 2020-02-29
      • 1970-01-01
      相关资源
      最近更新 更多