java - 无法在我的 web 应用程序中显示我的 pdf(不在阻止模式下)

标签 java angularjs spring-mvc pdf jasper-reports

嗨,我的问题是 Spring mvc 和 Angular js 之间的问题。我正在发出一个显示 pdf 的 get 请求。当我单独测试时,该网址工作正常。但是当我与前端交互时出现问题,并且我得到的异常不是处于阻塞模式。 这是我的代码:

   @RequestMapping(value = "/getFacture", method = RequestMethod.GET, headers = "Accept=application/json")
    public @ResponseBody  OutputStream postPrice(HttpServletResponse response) throws IOException {

        try {
            JasperTest.main(response.getOutputStream());
            response.setContentType("application/pdf");
        } catch (IOException e) {

            e.printStackTrace();
        }
        return JasperTest.main(response.getOutputStream());


    }

JasperTest.java

public static OutputStream main(OutputStream out) {

        try {
            System.out.println("Generating PDF...");

            JasperReport jasperReport = JasperCompileManager
                    .compileReport(JasperTest.class.getClassLoader().getResource("hellojasper.jrxml").getPath());


            List<ParamJasper> l = new ArrayList<ParamJasper>();

            l.add(new ParamJasper("Card 12"));
            JRDataSource JRdataSource = new JRBeanCollectionDataSource(l);
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null,
                    JRdataSource);
            JasperExportManager.exportReportToPdfStream(jasperPrint, out);

            System.out.println("HelloJasper.pdf has been generated!");
        } catch (JRException e) {
            e.printStackTrace();
        }
        return out;

    }

我的前端代码: Controller :

$scope.continueCheckOut = function(total, priceByCard, priceByCheque,
            priceByEspece, size) {
        $scope.priceByCard = priceByCard;
        $scope.priceByCheque = priceByCheque;
        $scope.priceByEspece = priceByEspece;

        $scope.cancel();
        $scope.total = total;
        ProductService.postPayement($scope.priceByCard, $scope.priceByEspece,
                $scope.priceByCheque, $scope.total,$rootScope.test.idClient).then(function(d) {

            self.payment = d;
            if (self.payment.result == true)
{
                console.log("Felecitation");
                ProductService.getFacture().then(function(d) {

                    self.pdf = d;
                }, function(errResponse) {
                    console.error('Error while generating pdf');
                });
}
            if (self.payment.result == false) {
                if (self.payment.reste != 0) {
                    $scope.reste = self.payment.reste;
                    console.log("scope reste is " + -($scope.reste));
                } else
                    alert("Veuillez payer le montant souhaité");
            }

        }, function(errResponse) {
            console.error('Error while fetching Currencies');
        });



    };

我的前端服务:

 getFacture : function()
    {
        return $http.get('http://127.0.0.1:9001/PrototypePos/rest/products/getFacture')
     .then(
                function(response){
                    return response.data;
                }, 
                function(errResponse){
                    console.error('Error while genrating facture');
                    return $q.reject(errResponse);
                }
        );
    }

我遇到的异常(exception)是:

GRAVE: Servlet.service() for servlet [dispatcher] in context with path [/PrototypePos] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write content: not in non blocking mode. (through reference chain: org.apache.catalina.connector.CoyoteOutputStream["ready"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: not in non blocking mode. (through reference chain: org.apache.catalina.connector.CoyoteOutputStream["ready"])] with root cause
java.lang.IllegalStateException: not in non blocking mode.
    at org.apache.coyote.Response.isReady(Response.java:609)
    at org.apache.catalina.connector.OutputBuffer.isReady(OutputBuffer.java:663)
    at org.apache.catalina.connector.CoyoteOutputStream.isReady(CoyoteOutputStream.java:156)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:654)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:675)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:130)
    at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1387)
    at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:889)
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:265)
    at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:100)
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:222)
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:153)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:165)
    at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:80)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:126)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:817)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:731)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:859)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    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:745)

最佳答案

我可以解决ly问题实际上我在我的angularJs中缺少一些代码来对pdf显示提出正确的请求!

关于java - 无法在我的 web 应用程序中显示我的 pdf(不在阻止模式下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36355086/

相关文章:

javascript - angularjs x 可编辑控件在完成或取消后失去焦点

java - 在 Java 中实现 Bean 类时遇到问题 - ClassCastException

java - 无法禁用 csrf Spring boot

java - 处理JSP页面: Neither BindingResult nor plain target object for bean name 'command' available as request attribute时出现JasperException

java - 根据 XSLT 版本选择 XSLT 处理器

javascript - 如何使用 Angular.js 中的某些唯一值从数组中删除值

java - 用户 MySQL Java Openshift 访问被拒绝

javascript - 为什么我不在 Angular Controller 中注入(inject)服务?

java - Spring Security 404 静态资源

java - JQuery 数据表将 JSON 传递到 Spring Controller ,出现错误 400 Bad Request