티스토리 뷰
language/java
java.lang.IllegalStateException: getWriter() has already been called for this response
kirinman 2023. 1. 31. 22:44public void memberExceptionHandler(HttpServletResponse response, String msg, int statusCode) {
response.setStatus(statusCode);
response.setContentType("application/json");
try {
String json = new ObjectMapper().writeValueAsString(new SecurityExceptionDto(statusCode, msg));
response.getWriter().write(json);
} catch (Exception e) {
log.error(e.getMessage());
}
}
위 코드를 작성하고 두 번 연속으로 요청을 보내니
java.lang.IllegalStateException: getWriter() has already been called for this response 에러가 나왔다.
위 에러는 getWriter()가 HttpServletResponse 객체에서 한 번 호출된 다음에 취소하지 않고 호출하면 발생하는 에러라고 한다.
response.getWriter().write(json)이라는 코드를 쓰지 않고 json을 넘겨줄 수 있는 코드가 있는지를 찾아보니
response.getOutputStream().write(json.getBytes())라는 코드가 있었다.
response.getWriter().write(json)은 문자 단위 출력을 제공하며 출력 형식이 스트링,
response.getOutputStream().write(json.getBytes())은 바이트 단위 출력을 제공하며 출력 형식이 바이트 배열이라는 차이가 있다고 한다.
이렇게 하니 문제가 해결되긴 했지만 정확히 어떤 이유로 해결되었는지는 아직 모르겠다..
그래서 그냥 이 코드는 사용하지 않고 dto로 상태코드와 메시지를 넘기고 setStatus를 통해 상태코드만 브라우저에서 동일하게 나올 수 있도록 잡아주었다.
'language > java' 카테고리의 다른 글
예외 처리 - Try-Catch문의 흐름 / Finally (0) | 2023.02.01 |
---|---|
예외 처리 - 에러와 예외 / 예외와 예외 클래스 (0) | 2023.02.01 |
Error: Gradle script '~~~' is not executable (0) | 2023.01.31 |
자바 chars()이용해서 문자열의 특정 값 개수 가져오기 (0) | 2023.01.17 |
substring 문자열 자르기 (0) | 2023.01.07 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 스프링faker
- EC2
- bankersRounding
- 동적크롤링
- jmeter부하테스트
- Redis
- 부하테스트시나리오
- Java
- jmeter토큰
- Spring
- index
- jmeter테스트
- 인덱스
- 토큰
- 프로그래머스
- 자바
- CorrectnessAndTheLoopInvariant
- CheckedException
- jmeter로그인
- 대규모더미데이터
- jmeter세션
- Redisson
- jmeter시나리오
- jwt
- 항해
- Python
- Lock
- hackerrank
- jmeter쿠키
- pessimisticlock
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함