【问题标题】:Request method 'POST' not supported when calling birt report调用 birt 报告时不支持请求方法“POST”
【发布时间】:2018-03-13 08:48:28
【问题描述】:

我正在尝试从控制器调用 Birt 报告,如下所示:

@RequestMapping(value = "/birtReport", method = RequestMethod.GET)
@ApiOperation("Download Report")
public void birtReport(HttpServletRequest request,HttpServletResponse response) throws ErrorExceptions, IOException{
        HttpClient httpClient = HttpClients.createDefault();
        HttpGet postRequest = new HttpGet("http://localhost:8080/birt/run?__report=MyFirstReport.rptdesign&id=211");
        HttpResponse response1 = httpClient.execute(postRequest);
        InputStream body = response1.getEntity().getContent();
        IOUtils.copy(body, response.getOutputStream());
        response.flushBuffer();

    }

但我收到以下错误:

Request method 'POST' not supported

堆栈跟踪:

org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported
    at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:207)
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:374)
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:314)
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:61)
    at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:352)
    at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1160)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:940)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:392)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:311)
    at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:395)
    at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:254)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:177)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

知道怎么解决吗?

提前谢谢你。

检查chrome生成的页面后,错误如下:

Request URL:http://localhost:8080/MyWebApp/statReport/birtReport__sessionId=20180313_115522_490?__sessionId=20180313_115522_490&__dpi=96
Request Method:POST
Status Code:500 
Remote Address:[::1]:8080
Referrer Policy:no-referrer-when-downgrade

【问题讨论】:

标签: java spring spring-mvc birt


【解决方案1】:

尝试改变

HttpGet postRequest = new HttpGet("http://localhost:8080/birt/run?__report=MyFirstReport.rptdesign&id=211");

到

HttpPost postRequest = new HttpPost("http://localhost:8080/birt/run?__report=MyFirstReport.rptdesign&id=211");

【讨论】:

    【解决方案2】:

    如果是这样配置的,请查看 web.xml。 if /* 导致 post 不被解析。

    <servlet-mapping>  
        <servlet-name>spring</servlet-name>  
        <url-pattern>/</url-pattern>  
    </servlet-mapping>  
    

    【讨论】:

      【解决方案3】:

      将方法改为RequestMethod.POST:

      @RequestMapping(value = "/birtReport", method = RequestMethod.GET)
      

      【讨论】:

        猜你喜欢
        • 2019-07-31
        • 1970-01-01
        • 2019-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-25
        相关资源
        最近更新 更多