我有一个带字段的对象
@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”行中得到一个空指针异常。我不知道为什么。我查看了其他帖子并尝试了所有这些方法,但它没有帮助。 任何指针都将受到赞赏。
答案 0 :(得分:0)
试试这个
@RequestMapping("/document/view/{docID}")
public String getAlert(@PathVariable("docID") String docId, HttpServletResponse response){
此外,如果您在控制器中处理response.outputstream而不是在服务中处理它,则会更好。