Java 在新选项卡中显示pdf不适用于jquery和spring mvc

Java 在新选项卡中显示pdf不适用于jquery和spring mvc,java,jquery,spring,spring-mvc,pdf,Java,Jquery,Spring,Spring Mvc,Pdf,我想在生成pdf后在新选项卡中显示它,我使用jQuery1.12.3和SpringMVC4 当我点击我的链接时,我生成了pdf,我的ajax方法显示成功,但我的pdf没有显示在新选项卡中,我忘记了什么 我浏览了以下帖子: 我试图删除ResponseBody注释,但得到了相同的结果 这是我的密码: HTML: <a id="3676274" class="bulletinLink" target="_blank" href="#">Bulletin du 2015-04-30&l

我想在生成pdf后在新选项卡中显示它,我使用jQuery1.12.3和SpringMVC4

当我点击我的链接时,我生成了pdf,我的ajax方法显示成功,但我的pdf没有显示在新选项卡中,我忘记了什么

我浏览了以下帖子:

我试图删除ResponseBody注释,但得到了相同的结果

这是我的密码:

HTML:

<a id="3676274" class="bulletinLink" target="_blank" href="#">Bulletin du 2015-04-30</a>
$(".bulletinLink").click(function(e){
    e.preventDefault();
    var id = $(this).attr('id');

    var oAjax;
    var sUrl = sUrlBase + '/generatePdf/'+id;

    oAjax = $.ajax({
            url: sUrl,
            type: 'GET',
            cache: false,
            data : '',
            async : false
    });

    oAjax.done(function(transport) {
        alert("success");
    });
    oAjax.fail(function(transport) {
        alert("fail");
    });
});
@RequestMapping(value = "/generatePdf/{id}", method = RequestMethod.GET)
@ResponseBody
public final ResponseEntity<byte[]> generateWithResponseBody(@PathVariable("id") final int idBulletin
            ,final HttpServletRequest httpRequete, final HttpServletResponse httpReponse) throws ApplicationException
{
...
HttpHeaders headers = new HttpHeaders();
headers.setContentType( MediaType.parseMediaType( "application/pdf" ) );
String filename = "spring_tutorial.pdf";
headers.setContentDispositionFormData( filename, filename );
headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(out.toByteArray(), headers, HttpStatus.OK);
return response;
}
Java:

<a id="3676274" class="bulletinLink" target="_blank" href="#">Bulletin du 2015-04-30</a>
$(".bulletinLink").click(function(e){
    e.preventDefault();
    var id = $(this).attr('id');

    var oAjax;
    var sUrl = sUrlBase + '/generatePdf/'+id;

    oAjax = $.ajax({
            url: sUrl,
            type: 'GET',
            cache: false,
            data : '',
            async : false
    });

    oAjax.done(function(transport) {
        alert("success");
    });
    oAjax.fail(function(transport) {
        alert("fail");
    });
});
@RequestMapping(value = "/generatePdf/{id}", method = RequestMethod.GET)
@ResponseBody
public final ResponseEntity<byte[]> generateWithResponseBody(@PathVariable("id") final int idBulletin
            ,final HttpServletRequest httpRequete, final HttpServletResponse httpReponse) throws ApplicationException
{
...
HttpHeaders headers = new HttpHeaders();
headers.setContentType( MediaType.parseMediaType( "application/pdf" ) );
String filename = "spring_tutorial.pdf";
headers.setContentDispositionFormData( filename, filename );
headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(out.toByteArray(), headers, HttpStatus.OK);
return response;
}
@RequestMapping(value=“/generatePdf/{id}”,method=RequestMethod.GET)
@应答器
公共最终响应Entity generateWithResponseBody(@PathVariable(“id”)final int idBulletin
,最终HttpServletRequest HttpRequeste,最终HttpServletResponse HttpReporte)引发应用程序异常
{
...
HttpHeaders=新的HttpHeaders();
headers.setContentType(MediaType.parseMediaType(“application/pdf”);
字符串filename=“spring\u tutorial.pdf”;
headers.setContentDispositionFormData(文件名、文件名);
headers.setCacheControl(“必须重新验证,后检查=0,前检查=0”);
ResponseEntity response=新的ResponseEntity(out.toByteArray(),headers,HttpStatus.OK);
返回响应;
}

问题是您需要将文件添加到HttpServletResponse,并且不需要在方法中返回任何值,因此使用void,将文件添加到响应中,浏览器将正确处理它

@RequestMapping(value = "/generatePdf/{id}", method = RequestMethod.GET)
@ResponseBody
public final void generateWithResponseBody(@PathVariable("id") final int idBulletin
            ,final HttpServletRequest httpRequete, final HttpServletResponse reponse) throws ApplicationException
{
    //Here retrieve your PDF file
    if(file != null) {
        String mimeType = URLConnection.guessContentTypeFromName(file.getName());
        if (mimeType == null) {
            logger.debug("mimetype is not detectable, will take default");
            mimeType = "application/pdf";
        }
        logger.debug("mimetype : {}", mimeType);
        response.setContentType(mimeType);
        response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", file.getName()));
        response.setContentLength((int) file.length());
        InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
        FileCopyUtils.copy(inputStream, response.getOutputStream());
    }
}

我在没有Ajax的情况下更改了jquery函数,如下所示:

window.open(sUrl);
此外,为了在选项卡中显示我的pdf文件并且不下载,我在控制器中删除了以下说明:

headers.setContentDispositionFormData( filename, filename );