Java 通过Ajax post请求下载文件

Java 通过Ajax post请求下载文件,java,ajax,spring-mvc,Java,Ajax,Spring Mvc,我正试图通过Ajax post请求下载一个文件。但我不能做到这一点,我尝试了很多,但我没有得到。下面是代码,请指导我怎么做 查询方法 $(document).on({click: function() { var elementId = $(this).attr('id').split("_"); var air = $('#itineraryAir_${formBean.tripDetailsId}').is(':checked');

我正试图通过Ajax post请求下载一个文件。但我不能做到这一点,我尝试了很多,但我没有得到。下面是代码,请指导我怎么做

查询方法

 $(document).on({click: function() {
            var elementId = $(this).attr('id').split("_");
            var air = $('#itineraryAir_${formBean.tripDetailsId}').is(':checked');
            var car = $('#itineraryCar_${formBean.tripDetailsId}').is(':checked');
            var hotel = $('#itineraryHotel_${formBean.tripDetailsId}').is(':checked');
            if(air == true || car == true || hotel ==  true){    
                $('#itinerary_modal').modal( 'hide');
            $.ajax({
                url: "<%=request.getContextPath()%>/viewBooking/downloadItinerary/" +air+"/"+car+"/"+hotel+"/"+elementId[2],
                type: 'POST',
                dataType: 'text/json',
                beforeSend: function() {
                },
                success: function(data) {

               },
                complete: function() {
               }

            }, '.edit_hotel');
        }else{
            var result="Select itinerary." 
                showMsg($("#ItineraryMsg"),result,"alert-danger");
        }
        }
        }, '.it_download');  
$(文档).on({单击:函数(){
var elementId=$(this.attr('id').split('uuz”);
var air=$('#巡回air'{formBean.tripDetailsId}')。是(':checked');
var car=$('#inventurecar'{formBean.tripDetailsId}')。是(':checked');
var hotel=$(“#巡回酒店${formBean.tripDetailsId}”)。是(“:checked”);
如果(air==true | | car==true | | hotel==true){
$('行程模式').model('隐藏');
$.ajax({
url:“/viewBooking/downloaddinerary/”+air+“/”+car+“/”+hotel+“/”+elementId[2],
键入:“POST”,
数据类型:“text/json”,
beforeSend:function(){
},
成功:功能(数据){
},
完成:函数(){
}
},“.edit_hotel”);
}否则{
var result=“选择行程。”
showMsg($(“#行程msg”)、结果、“警报危险”);
}
}
}下载),;
在上面的代码中,我获取元素Id、空气、汽车和酒店的详细信息,并通过URL传递所有这些值。在SpringController类中,我动态生成PDF文件,该文件正在生成,但我无法显示供用户下载

服务器端代码

    //the below line of code to generate pdf file. It is generating pdf file but I am not able to pass to client.

        public @ResponseBody void downloadInPDF(@PathVariable("air") Boolean air,
                    @PathVariable("car") Boolean car,
                    @PathVariable("hotel") Boolean hotel,
                    @PathVariable("tripDetailsId") String tripDetailsId,
                    HttpServletResponse response,HttpServletRequest request) throws IOException {
                TripDetails td = tripDetailsService.get(Integer.parseInt(tripDetailsId));
                Users user=userService.getByUserIdNew(String.valueOf(td.getUser().getUserId()));
                Employee employee=employeeService.getEmployeeByEmployeeId(user.getEmployee().getEmployeeId());
                if(hotel == true){
                    List<TripHotels> tripHotels = hotelService
                            .getHotelDetailsByTripId(td);

                    generatePdf.getPdfFileHotel(AppConstant.ETICKET_PATH, tripHotels, td,employee);

                        String filePathToBeServed = AppConstant.ETICKET_PATH + td.getTripId()
                                + "_Hotel.pdf";
                            File fileToDownload = new File(filePathToBeServed);
                        InputStream inputStream = new FileInputStream(fileToDownload);
                        response.setContentType("application/pdf");
                        response.setHeader("Content-Disposition", "attachment; filename="+td.getTripId() + "_Hotel.pdf");
                        IOUtils.copy(inputStream, response.getOutputStream());
                        response.flushBuffer();
                        inputStream.close();
                }
            }
//生成pdf文件的下面一行代码。它正在生成pdf文件,但我无法传递给客户端。
public@ResponseBody void downloadInPDF(@PathVariable(“air”)布尔空气,
@路径变量(“car”)布尔值car,
@PathVariable(“酒店”)布尔酒店,
@PathVariable(“tripDetailsId”)字符串tripDetailsId,
HttpServletResponse响应,HttpServletRequest请求)引发IOException{
TripDetails td=tripDetailsService.get(Integer.parseInt(TripDetailsSid));
Users user=userService.getByUserIdNew(String.valueOf(td.getUser().getUserId());
Employee Employee=employeeService.getEmployeeByEmployeeId(user.getEmployee().getEmployeeId());
if(hotel==true){
列出tripHotels=hotelService
.getHotelDetailsByTripId(td);
generatePdf.getPdfFileHotel(AppConstant.ETICKET_PATH,tripHotels,td,员工);
字符串filePathToBeServed=AppConstant.ETICKET_PATH+td.getTripId()
+“_Hotel.pdf”;
File fileToDownload=新文件(filePathToBeServed);
InputStream InputStream=新文件InputStream(fileToDownload);
response.setContentType(“application/pdf”);
response.setHeader(“内容处置”、“附件;文件名=“+td.getTripId()+””_Hotel.pdf”);
copy(inputStream,response.getOutputStream());
response.flushBuffer();
inputStream.close();
}
}

为什么要使用ajax?只要生成一个链接到它打开一个空白窗口,它应该做的技巧。。。可能会有所帮助,尽管使用这些参数很方便-数据类型:'text',内容类型:'application/pdf',但我只需要使用ajax。我尝试使用参数-数据类型:'text',内容类型:'application/pdf',我不明白。