<Spring Package>
ResponseEntity<T> : HttpEntity 부모로 상속받은 클래스 이다. ResponseEntity 클래스는 헤더와 본문으로 구성된 HTTP 요청 또는 응답 엔티티를 나타낸다.
InputStreamResource : 특정 자원(resource) 구현이 적용 되지 않는 경우에만 사용한다. 특히 ByteArrayResource경우 파일 기반 Resource 구현을 선호한다. <-- 데이터베이스 BLOB(PDF) 데이터 저장용도
코드해석 : 데이터베이스 테이블 컬럼에서 파일 이름과 조건에 맞는 자원을 Object로 가져온다. 가져온 자원에 byte 배열로 저장된 pdf 자원을 SerialBlob 객체를 생성 시 파라미터 자원으로 사용한다. SerialBlob 메소드 중에서 InputStream 리턴하는 메소드를 이용하여 InputStreamResource 객체를 생성할 때 파라미터 자원으로 사용한다. 리턴타입으로는 ResponseEntity를 이용 하는데 ResponseEntity 제네릭 타입을 InputStreamResource 지정한다. Controller 반환할 때 HTTP header , contentLength, contentType, body 설정한 객체를 반환시킨다.
<source>
public ResponseEntity<InputStreamResource> getPdfOutput(HttpServletRequest request, HttpServletResponse response, String fileName) throws Exception { PdfVO pvo = pMapper.selecetPdf(fileName); if(pvo == null) { throw new NoDataException("잘못된 URL입니다."); } SerialBlob serB = new SerialBlob(pvo.getFileData()); HttpHeaders headers = new HttpHeaders(); headers.add("content-disposition", "inline;filename="+ fileName); InputStreamResource resource = new InputStreamResource(serB.getBinaryStream()); return ResponseEntity.ok() .headers(headers) .contentLength(serB.length()) .contentType(MediaType.parseMediaType("application/pdf")) .body(resource); /* Spring Vresion 4.1 미만인 경우 HttpHeaders headers = new HttpHeaders(); headers.add("content-disposition", "inline;filename="+ id); headers.setContentType(MediaType.parseMediaType("application/pdf")); headers.setContentLength(serB.length()); InputStreamResource resource = new InputStreamResource(serB.getBinaryStream()); return new ResponseEntity<InputStreamResource>(resource, headers, HttpStatus.OK); */ }
'낙서장 > Spring' 카테고리의 다른 글
Spring Image DataBase Insert (0) | 2022.02.21 |
---|---|
[url mapping pattern] /* /** 차이 (0) | 2021.10.13 |
Oracle DataBase PDF파일 값 넣기!! (0) | 2021.09.07 |
Spring 다른 서버에 파일 보내기(FTP) (0) | 2021.09.07 |
Spring Project Setting (0) | 2021.08.19 |