반응형
안녕하세요.
오늘은 SpringFramework의 controller에서 리턴형식을 void하는 방법에 대하여 알아보겠습니다.
아래와 같은 경우가 해당하는데요.
@GetMapping("/example")
public void exampleMethod() {
// 내부 동작로직은 있으나 아무것도 반환하지 않는 경우
}
"그냥 저렇게 쓰면 되는거 아닌가?" 할수도 있지만, 위와 같이 작성 할 경우 스프링은 example이라는 이름의 템플릿 파일을 찾으려 하지만, 해당 파일이 없기에 template parsing error가 발생합니다.
스프링에서 template parsing error 발생 원인
- 컨트롤러 메서드에 명시적으로 뷰 이름을 반환하지 않는 경우
- 스프링이 요청 URL과 일치하는 템플릿 파일을 찾지 못하는 경우
이러한 경우 일반적으로는 return값에 뷰파일을 명시해주거나 @RestController를 활용하는 방법이 있는데,
@Controller를 사용하면서, 처음에 설명하였듯 해당 url이 호출되면 내부적인 동작 로직만 있고 사용자에게는 아무런 변화를 주지 않으려고 합니다.
예를들어 비동기로 엑셀 파일을 생성하는 로직이 들어간다고 가정하겠습니다.
사용자가 "엑셀 생성" 버튼을 누름 -> 비동기로 엑셀 생성이 시작됨 -> 사용자에겐 아무런 변화가 없어야 함.
위 조건으로 볼 경우 아래와 같이 작성이 가능합니다.
@Controller
public class ExcelController {
@Autowired
private ExcelService excelService;
@GetMapping("/example")
public void generateExcel(HttpServletResponse response) {
String filePath = "/tmp/large_excel_file.xlsx";
try {
// 비동기로 엑셀 생성
excelService.generateLargeExcelFile(filePath);
// HTTP 상태 설정
response.setStatus(HttpServletResponse.SC_OK); // 200 OK
} catch (Exception e) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); // 500 Error
e.printStackTrace();
}
}
}
이렇게 코드를 작성할 경우,
사용자가 엑셀 생성 버튼을 눌렀을때 엑셀 생성은 서버에서 비동기로 진행되고, 화면에는 200 상태 코드를 리턴해주기때문에
에러가 발생하지 않게 됩니다.
감사합니다.
반응형
'SpringFramework | SpringBoot' 카테고리의 다른 글
[ Spring_Mybatis] Mybatis와 Oracle을 연결하기위한 Dialect 구현_paging_rownum (0) | 2025.01.10 |
---|---|
톰캣(Tomcat) 포트 충돌시 죽이는 법 (1) | 2024.04.27 |
<![CDATA[ ]]>의사용 (0) | 2023.12.27 |
Spring에서 서버 재기동없이 mybatis의 XML파일을 바로 적용하는 법 (1) | 2023.12.26 |
Spring에서 실제 동작한 쿼리를 로그에 찍는법 (0) | 2023.12.25 |