HTTP重定向到HTTPS,post请求成了GET请求 报 Required request body is missing 和 Request method GET not supported

本地调试没问题,但是把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 missingRequest 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,

解决:

  1. postman的url加上 https://

HTTP重定向到HTTPS,post请求成了GET请求
2. 还有一个问题也会导致Required request body is missing ,就是MeiziTuPictureRequestVo 为空。

@DisableAuth
    @PostMapping(path = "/getModelHomeBackgroundInfoPost")
    public RetResult getModelHomeBackgroundInfoPost(@RequestBody MeiziTuPictureRequestVo meiziTuPictureRequestVo)
    {
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醋酸菌HaC

请我喝杯奶茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值