org.springframework.http.converter.HttpMessageNotReadableException:缺少必需的请求正文:public org.springframework.http.ResponseEntity
org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public org.springframework.http.ResponseEntity
@RequestBody 用户用户
我有一个读取请求主体的拦截器,我看到 Http Servlet 请求在读取一次后从 POST 主体丢失参数。这里
它只能被读取一次
如何使所有请求(正文)都可缓存,以便可以使用 spring 引导多次读取它?
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)
您不能多次读取请求,因为您加载了正文以便您可以使用它。另一种可能的解决方案是将此请求分解为两个单独的请求。第一个是拦截器,它会做一些事情,在这些事情之后,它会向第二个私有的 API 发送请求。
p.s。为什么需要先阅读请求?
@RequestBody 用户用户 我有一个读取请求主体的拦截器,我看到 Http Servlet 请求在读取一次后从 POST 主体丢失参数。这里 它只能被读取一次 如何使所有请求(正文)都可缓存,以便可以使用 spring 引导多次读取它?
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)
您不能多次读取请求,因为您加载了正文以便您可以使用它。另一种可能的解决方案是将此请求分解为两个单独的请求。第一个是拦截器,它会做一些事情,在这些事情之后,它会向第二个私有的 API 发送请求。
p.s。为什么需要先阅读请求?