티스토리 뷰
배경
스프링 부트 2.0.0으로 코딩중이며, 협업하는 개발자가 스프링 부트를 모르는지 외장 톰캣 환경에서 작업하고 PR을 줬다. 로컬환경에서 먼저 테스트를 하는데, ajaxSubmit 함수를 이용한 통신에서 error를 반환했다. 외장 톰캣에선 문제가 없었고, 내장 톰캣에선 문제가 생겼던 해당 이슈에 대해 정리하고자 한다.
++ 추가
확인해보니, 외장 톰캣에서도 에러가 떴다. 기능엔 이상이 없어 해당 개발자가 에러를 못보고 지나친듯 하다.
Cannot forward to error page for request [/xxx/xxx/xxx] as the response has already been committed. As a result, the response may have the wrong status code. If your application is running on WebSphere Application Server you may be able to resolve this problem by setting com.ibm.ws.webcontainer.invokeFlushAfterService to false
과정 1
해당 개발자의 소스는 엑셀 파일을 업로드하는 구조였고, String을 null로 반환했다. 이 소스는 내장 톰캣에서 404에러를 반환했다.
과정 2
String 반환을 void로 바꿔봤다. 이 또한 404를 반환했다.
왜 404 에러일까?
위의 오류 코드를 통해 유추해보면 ajax는 성공이나 실패에 대한 상태코드 반환값이 필요한데, void나 상태코드가 아닌 값을 반환하니 익셉션이 발생해 error 페이지를 찾으려고 했다. 그러나 이를 찾지 못해 404를 반환한 것으로 보인다.
++ 추가
확인을 해보니 404 페이지와는 상관이 없는 것으로 보인다. ajax 요청에 대해 상태코드 반환값이 아닌경우 왜 404가 발생하는지는 아직도 모르겠다.
다른 책을 보고 알게된 내용인데, 리턴값을 void로 하면 RequestMapping와 같은 경로로 뷰 파일을 찾는다.
예를 들어 @RequestMapping("/board/view") public void view(){//todo} 라면 뷰 최상위 경로 밑 /board/view 파일을 찾는다. 이로 인한 에러였다.
해결
@ResponseBody 나 ReponseEntity로 직접 http 상태 코드를 반환해주면 해결된다.
'Java > Spring' 카테고리의 다른 글
Mybatis에서 Enum 타입이 포함된 객체를 foreach 할때 에러 (0) | 2018.07.02 |
---|---|
Spring boot JSP 에러 페이지 출력 (0) | 2018.06.28 |
Spring Redis Session (0) | 2018.06.27 |
파일 업로드 & 다운로드 규칙을 정해보자. (0) | 2018.06.26 |
Thymeleaf 사용시 org.thymeleaf.exceptions.TemplateInputException: Error resolving template "/index", template might not exist or might not be accessible by any of the configured Template Resolvers (1) | 2018.06.25 |