Spring에서는 Ajax 요청 후 응답을 받고자 하면 보통 컨트롤러에서 해당 메소드에 @ResponseEntity Annotation을 달아놓고 return 으로 반환하면 잘 받는다.
하지만 Servlet에는 @ResponseEntity Annotation이 없으니 다르게 리턴해야 했다.
요청을 처리 후 결과는 PrintWriter로 처리하면 응답을 보낼 수 있었다.
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String result = boardService.delete(request);
PrintWriter out = response.getWriter();
out.print(result);
}
자 여기서 문제점.
String 타입으로 응답을 받고자 했고 정상적으로 처리가 된 경우 "success"를 받고 문제가 발생한 경우에는 "fail"을 받고자 했었다.
Ajax에서는 if(result == "success")로 처리를 하고 있었다.
근데 여기서 해당 조건에 걸리질 않았다.
ajax에서 console로 찍어봐도 success를 출력하는데 전혀 조건에 걸리질 않았다.
javaScript에서 문자열 비교할 때 다른 방법이 있나 찾아보고 다 해봤지만 하나도 안됐다.
문제는 PrintWriter 처리에서 있었다.
out.print(result)로 보내야 했지만 코드를 마저 다 쓰는것이 귀찮았던지라 자동완성으로 out.println(result)를 찍었던것..
out.print로 수정하니 정상적으로 잘 체크할 수 있었다.
정확하게 아! 이거때문에! 라고 할 순 없지만 아마 내 생각에는
print의 경우 "success"로 넘어왔을 것이고 개행을 하는 println의 경우는 "success\n"으로 넘어와서 그 차이에 비교를 할 수 없었던 것 아닐까 싶다.
정리하는김에 getJSON 요청에 대한 처리도 정리.
jQuery를 통해 getJSON 요청을 보내 데이터를 파싱하고 처리하는 부분이 있었다.
이것 역시 Spring에서는 ResponseEntity로 리턴을 해 쉽게 처리했었다.
Servlet에서는 역시 ResponseEntity가 없다..
그럼 이걸 처리하기 위해서는 json으로 변환을 해줘야 할 필요가 있었고, 그 데이터를 보내줘야 했다.
json 변환을 처리하기 위해서는 gson 라이브러리를 사용했고 코드는 아래와 같이 처리했다.
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
CommentDTO dto = commentService.getComment(request);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
String gson = new GsonBuilder().setDateFormat("yyyy-mm-dd").create().toJson(dto);
response.getWriter().write(gson);
}
일단 gson 처리에서 문제가 있다.
이 프로젝트에서 Date 구조의 경우 yyyy-mm-dd 구조로 데이터베이스에 담겨있고 이 구조대로 출력이 된다.
하지만 gson으로 변환하면 Date 구조가 00월 00일 00년 형태로 지맘대로 바꿔버린다.
그래서 변환을 할 때 setDateFormat으로 설정해줄 필요가 있다.
그리고 응답의 경우 print() 가 아닌 write()로 응답하면 된다.
'Project&문제해결' 카테고리의 다른 글
JWT&Redis 로그인에 대한 고민 (0) | 2023.10.25 |
---|---|
JDBCTemplate 동적 쿼리 문제 해결 (0) | 2023.10.20 |
@Transactional의 rollback처리 문제 해결 (0) | 2023.09.29 |
REST 프로젝트에 JWT 적용 (0) | 2023.06.12 |
Eclipse에서 생성한 프로젝트 IntelliJ에서의 컴파일 문제해결 (0) | 2021.11.24 |