嗨,我的问题是 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/