使用spring和hibernate从Oracle数据库显示pdf / download pdf

时间:2014-03-12 17:17:41

标签: web-services hibernate java-ee spring-mvc

我有一个带字段的对象

@Column(name = "PDF")
@Lob @Basic(fetch=javax.persistence.FetchType.LAZY)
private byte[] pdf;

我的dao使用enitity manager findbyid()方法成功检索此对象。

我想在浏览器上显示这个pdf,或者在请求来到我的控制器时下载pdf。

这就是我所做的。

@Autowired
DocDownloadService docService;
HttpServletResponse response;
@RequestMapping("/document/view/{docID}")
public String getAlert(@PathVariable("docID") String docId){
    docService.downloadDoc(docId, response);
    return null;
}

我的服务

@Override
@Transactional
public String downloadDoc(String docId, HttpServletResponse response){

    MyDoc doc = this.getDocById(docId); //brings document object from my DAO

    try {
        response.addHeader("Content-Disposition", "attachment;filename=report.pdf");
        response.setContentType("application/pdf");
        response.getOutputStream().write(doc.getPdf(), 0, doc.getPdf().length);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    return null;
}

我在“response.addheaders”行中得到一个空指针异常。我不知道为什么。我查看了其他帖子并尝试了所有这些方法,但它没有帮助。 任何指针都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

试试这个

@RequestMapping("/document/view/{docID}")
public String getAlert(@PathVariable("docID") String docId, HttpServletResponse response){

此外,如果您在控制器中处理response.outputstream而不是在服务中处理它,则会更好。