本地调试没问题,但是把jar打到生产就报错了:
2020-05-24 16:34:43,554 [http-nio-8888-exec-10] ERROR [c.y.springBootDemo.config.GlobalExceptionHandler] GlobalExceptionHandler.java:21 - 出错啦:
org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public com.yudianxx.springBootDemo.model.responseVo.RetResult com.yudianxx.springBootDemo.controller.MeiZiPictureController.getModelHomeBackgroundInfo(com.yudianxx.springBootDemo.model.requestVo.MeiziTuPictureRequestVo)
调用:
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported
at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:200)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:419)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:365)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:65)
at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:401)
at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1231)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1014)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
看到: Required request body is missing
和 Request method 'GET' not supported
我看到我的controller没问题啊,有@RequestBody
@DisableAuth
@RequestMapping(value = "/getModelHomeBackgroundInfo")
public RetResult getModelHomeBackgroundInfo(@RequestBody MeiziTuPictureRequestVo meiziTuPictureRequestVo){
log.info("进入getModelHomeBackgroundInfo");
Map<String, Object> map = new HashMap<>();
if (meiziTuPictureRequestVo.getModelId() == null) {
return RetResponse.makeErrRsp("参数为空");
}
map = meiztuPictureService.getModelHomeBackgroundInfo(meiziTuPictureRequestVo.getModelId());
return RetResponse.makeOKRsp(map);
}
@requestBody这个标签在post 、put 方法中用于接收json格式的数据,换转出Object。
@requestParam这个标签在get方法接收的是key-value形式的表单参数。
这两点我还是知道的。
无奈找不到原因。。。
于是我重新写两个方法:
@DisableAuth
@PostMapping(path = "/getModelHomeBackgroundInfoPost")
public RetResult getModelHomeBackgroundInfoPost(@RequestBody MeiziTuPictureRequestVo meiziTuPictureRequestVo){
log.info("进入getModelHomeBackgroundInfoPost");
Map<String, Object> map = new HashMap<>();
if (meiziTuPictureRequestVo.getModelId() == null) {
return RetResponse.makeErrRsp("参数为空");
}
map = meiztuPictureService.getModelHomeBackgroundInfo(meiziTuPictureRequestVo.getModelId());
return RetResponse.makeOKRsp(map);
}
@DisableAuth
@GetMapping(value = "/getModelHomeBackgroundInfoGet")
public RetResult getModelHomeBackgroundInfoGet(@RequestParam(name = "modelId") String modelId){
MeiziTuPictureRequestVo meiziTuPictureRequestVo = new MeiziTuPictureRequestVo();
meiziTuPictureRequestVo.setModelId(modelId);
log.info("进入getModelHomeBackgroundInfoGet");
Map<String, Object> map = new HashMap<>();
if (meiziTuPictureRequestVo.getModelId() == null) {
return RetResponse.makeErrRsp("参数为空");
}
map = meiztuPictureService.getModelHomeBackgroundInfo(meiziTuPictureRequestVo.getModelId());
return RetResponse.makeOKRsp(map);
}
一个get,一个post,重新在postman调用,
并且在拦截器打印请求方法:
本地:
2020-05-24 17:32:02,590 [http-nio-8888-exec-4] INFO [c.y.springBootDemo.interceptor.MyInterceptor] MyInterceptor.java:37 - 拦截成功
2020-05-24 17:32:02,590 [http-nio-8888-exec-4] INFO [c.y.springBootDemo.interceptor.MyInterceptor] MyInterceptor.java:39 - 打印当前请求:GET
2020-05-24 17:32:02,594 [http-nio-8888-exec-4] INFO [c.y.s.controller.MeiZiPictureController] MeiZiPictureController.java:51 - 小程序接口调入测试
2020-05-24 17:32:02,906 [http-nio-8888-exec-4] INFO [io.lettuce.core.EpollProvider] EpollProvider.java:68 - Starting without optional epoll library
2020-05-24 17:32:02,908 [http-nio-8888-exec-4] INFO [io.lettuce.core.KqueueProvider] KqueueProvider.java:70 - Starting without optional kqueue library
2020-05-24 17:32:03,258 [http-nio-8888-exec-4] INFO [c.y.s.controller.MeiZiPictureController] MeiZiPictureController.java:61 - map:{}
2020-05-24 17:34:13,416 [http-nio-8888-exec-5] INFO [c.y.springBootDemo.interceptor.MyInterceptor] MyInterceptor.java:37 - 拦截成功
2020-05-24 17:34:13,417 [http-nio-8888-exec-5] INFO [c.y.springBootDemo.interceptor.MyInterceptor] MyInterceptor.java:39 - 打印当前请求:POST
2020-05-24 17:34:13,556 [http-nio-8888-exec-5] INFO [c.y.s.controller.MeiZiPictureController] MeiZiPictureController.java:136 - 进入getModelHomeBackgroundInfo
没毛病。
打包继续上生产、
日志:
post变成了get,
解决:
- postman的url加上
https://
HTTP重定向到HTTPS,post请求成了GET请求
2. 还有一个问题也会导致Required request body is missing
,就是MeiziTuPictureRequestVo
为空。
@DisableAuth
@PostMapping(path = "/getModelHomeBackgroundInfoPost")
public RetResult getModelHomeBackgroundInfoPost(@RequestBody MeiziTuPictureRequestVo meiziTuPictureRequestVo)
{
}