Java 在SpringMVC中从ajax调用jasperreport时出现解析器错误
我从jQueryAjax调用endpoint来使用SpringMVC生成jasperreport,我想在新的浏览器选项卡中以pdf格式查看生成的报告。 问题是,我得到的报告parsererror从文本到应用程序的转换失败/pdf错误返回到ajax,如果我从浏览器调试请求,我会看到响应中获得的pdf文本 下面是调用SpringMVC方法的Ajax代码Java 在SpringMVC中从ajax调用jasperreport时出现解析器错误,java,jquery,ajax,spring-mvc,parsing,Java,Jquery,Ajax,Spring Mvc,Parsing,我从jQueryAjax调用endpoint来使用SpringMVC生成jasperreport,我想在新的浏览器选项卡中以pdf格式查看生成的报告。 问题是,我得到的报告parsererror从文本到应用程序的转换失败/pdf错误返回到ajax,如果我从浏览器调试请求,我会看到响应中获得的pdf文本 下面是调用SpringMVC方法的Ajax代码 var developerData = {}; developerData["from"] = $("
var developerData = {};
developerData["from"] = $("#productivity_dateTimeFrom").val();
developerData["to"] = $("#productivity_dateTimeTo").val();
$.ajax({
type : "POST",
contentType : "application/json; charset=utf-8",
url : 'Productivity',
data : JSON.stringify(developerData),
dataType : 'application/pdf',
success : function(data) {
window.open(data.fileUrl);
},
error : function(request,status,error){
alert(request)
alert(status)
alert(error)
}
});
要从ajax调用的Spring mvc方法:
@RequestMapping(value = "/Productivity", method = RequestMethod.POST, produces ="application/pdf")
@ResponseBody
public ResponseEntity<byte[]> runReport(@RequestBody String object) throws IOException, JRException {
db_con db_con = new db_con();
Resource resource = new ClassPathResource("Productivity.jasper");
InputStream jasperStream = null;
Gson g = new Gson();
try {
jasperStream = resource.getInputStream();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
DateTimeRange p = g.fromJson(object, DateTimeRange.class);
Map<String, Object> params = new HashMap<String, Object>();
params.put("p_from_date",dateUtils.convertStringToTimestamp(p.getFrom().replace("T", " ")+":00.000"));
params.put("p_to_date",dateUtils.convertStringToTimestamp(p.getTo().replace("T", " ")+":00.000"));
params.put("username", "admin");
params.put("p2", 1L);
params.put("p3", "All");
JasperReport jasperReport = null;
try {
jasperReport = (JasperReport) JRLoader.loadObject(jasperStream);
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection rep_connection = null;
try {
rep_connection = db_con.get_connection();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JasperPrint jasperPrint = null;
try {
jasperPrint = JasperFillManager.fillReport(jasperReport, params, rep_connection);
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
try {
JasperExportManager.exportReportToPdfStream(jasperPrint, outStream);
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_PDF);
String filename = "report.pdf";
headers.add("content-disposition", "inline;filename=" + filename);
return new ResponseEntity<>(outStream.toByteArray(), headers, HttpStatus.OK);
}
@RequestMapping(value=“/Productivity”,method=RequestMethod.POST,products=“application/pdf”)
@应答器
public ResponseEntity runReport(@RequestBody String对象)引发IOException、JREException{
db_con db_con=新的db_con();
资源资源=新类路径资源(“Productivity.jasper”);
InputStream jasperStream=null;
Gson g=新的Gson();
试一试{
jasperStream=resource.getInputStream();
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
DateTimeRange p=g.fromJson(对象,DateTimeRange.class);
Map params=新的HashMap();
参数put(“p_from_date”,dateUtils.convertStringToTimestamp(p.getFrom().replace(“T”,“”“)+”:00.000”);
参数put(“p_to_date”,dateUtils.convertStringToTimestamp(p.getTo().replace(“T”,““””)+“:00.000”);
参数put(“用户名”、“管理员”);
参数put(“p2”,1L);
参数put(“p3”、“全部”);
JasperReport-JasperReport=null;
试一试{
jasperReport=(jasperReport)JRLoader.loadObject(jasperream);
}捕获(JRE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
连接rep_Connection=null;
试一试{
rep_connection=db_con.get_connection();
}catch(classnotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
JasperPrint JasperPrint=null;
试一试{
jasperPrint=JasperFillManager.fillReport(jasperReport,params,rep_connection);
}捕获(JRE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
最终ByteArrayOutputStream EXTREAM=新ByteArrayOutputStream();
试一试{
jaspeexportmanager.exportreporttopfstream(jasperPrint,outStream);
}捕获(JRE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
HttpHeaders=新的HttpHeaders();
headers.setContentType(MediaType.APPLICATION\uPDF);
String filename=“report.pdf”;
headers.add(“内容处置”、“内联;文件名=“+filename”);
返回新的ResponseEntity(outStream.toByteArray(),headers,HttpStatus.OK);
}
尝试将pdf下载为blob,并使用blob url查看它
$.ajax({
type : "POST",
contentType : "application/json; charset=utf-8",
url : 'Productivity',
data : JSON.stringify(developerData),
xhrFields:{
responseType: 'blob'
},
success : function(data) {
window.open(URL.createObjectURL(data));
},
error : function(request,status,error){
alert(request)
alert(status)
alert(error)
}
});
控制器的方法是什么?它是真的吗?