본문 바로가기
SpringFramework | SpringBoot

[SpringFramework] controller에서 리턴형식을 void하는 방법

by Lcoding 2024. 12. 16.
반응형

안녕하세요.

 

오늘은 SpringFramework의 controller에서 리턴형식을 void하는 방법에 대하여 알아보겠습니다.

 

아래와 같은 경우가 해당하는데요.

@GetMapping("/example")
    public void exampleMethod() {
        
        // 내부 동작로직은 있으나 아무것도 반환하지 않는 경우
        
    }

 

"그냥 저렇게 쓰면 되는거 아닌가?" 할수도 있지만, 위와 같이 작성 할 경우 스프링은 example이라는 이름의 템플릿 파일을 찾으려 하지만, 해당 파일이 없기에 template parsing error가 발생합니다.

 

스프링에서 template parsing error 발생 원인

  1. 컨트롤러 메서드에 명시적으로 뷰 이름을 반환하지 않는 경우
  2. 스프링이 요청 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 상태 코드를 리턴해주기때문에

에러가 발생하지 않게 됩니다.

 

감사합니다.

   

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

loading