Request Body로 보내지는 JSON의 행방 불명
페이지 정보
작성자 미친새 작성일 21-07-08 09:51 조회 9,702 댓글 0본문
진짜 해결
프론트: JSON 데이터를 application/json으로 보내되, JSON 객체를 JSON.stringify()로 문자열화 해서 서버에 보내야 한다.
스프링 백엔드: JSON 데이터와 구조가 같은 DTO를 만들고, 컨트롤러 메서드에 @RequestBody를 붙여서 DTO를 파라미터에 추가하면 Spring이 Jackson을 통해 JSON의 값을 읽어서 DTO에 잘 넣어준다.
System.out.println("request1: "+request.getReader().lines().collect(Collectors.joining()));
System.out.println("request2: "+request.getParameterMap());
Spring Project 를 수행하다가 Parameter나 Header값이 아닌 POST방식으로 전송된 body 데이터(“application/json” 타입)를 추출해야 할 필요가 생겼다. 처음에는 쉽게 생각하여 HttpServletRequest를 활용하여 getAttribute() 함수를 사용하거나 그 외 여러 함수를 사용해 보았지만 소용이 없었다. 그래서 인터넷을 찾아본 결과 HttpServletRequest의 getReader() 함수나 getInputStream() 함수를 사용하면 추출을 할 수 있다고 하여 사용해 보았지만, 아래와 같은 메시지가 발생하며 오류 처리되었다. INFO : com.commons.util.JsonUtils - Error reading JSON string: java.lang.IllegalStateException: getInputStream() has already been called for this request
참고 링크
https://velog.io/@hellozin/RequestParamrequired-false-%EC%A3%BC%EC%9D%98%ED%95%A0-%EC%A0%90
https://meetup.toast.com/posts/44
위와 같은 메시지가 발생하는 원인은, HttpServletRequest의 InputStream은 한번 읽으면 다시 읽을 수 없다(톰캣 개발자들이 막아놨음).
프론트: JSON 데이터를 application/json으로 보내되, JSON 객체를 JSON.stringify()로 문자열화 해서 서버에 보내야 한다.
스프링 백엔드: JSON 데이터와 구조가 같은 DTO를 만들고, 컨트롤러 메서드에 @RequestBody를 붙여서 DTO를 파라미터에 추가하면 Spring이 Jackson을 통해 JSON의 값을 읽어서 DTO에 잘 넣어준다.
System.out.println("request1: "+request.getReader().lines().collect(Collectors.joining()));
System.out.println("request2: "+request.getParameterMap());
Spring Project 를 수행하다가 Parameter나 Header값이 아닌 POST방식으로 전송된 body 데이터(“application/json” 타입)를 추출해야 할 필요가 생겼다. 처음에는 쉽게 생각하여 HttpServletRequest를 활용하여 getAttribute() 함수를 사용하거나 그 외 여러 함수를 사용해 보았지만 소용이 없었다. 그래서 인터넷을 찾아본 결과 HttpServletRequest의 getReader() 함수나 getInputStream() 함수를 사용하면 추출을 할 수 있다고 하여 사용해 보았지만, 아래와 같은 메시지가 발생하며 오류 처리되었다. INFO : com.commons.util.JsonUtils - Error reading JSON string: java.lang.IllegalStateException: getInputStream() has already been called for this request
참고 링크
https://velog.io/@hellozin/RequestParamrequired-false-%EC%A3%BC%EC%9D%98%ED%95%A0-%EC%A0%90
https://meetup.toast.com/posts/44
위와 같은 메시지가 발생하는 원인은, HttpServletRequest의 InputStream은 한번 읽으면 다시 읽을 수 없다(톰캣 개발자들이 막아놨음).
첨부파일
- [Spring]POST 방식으로 전달된 JSON 데이터 처리하기 _ 두발로걷는개.pdf (287.0K) 0회 다운로드 | DATE : 2021-07-08 14:06:57
- dev-tips_Request Body로 보내지는 JSON의 행방 불명.md at master · HomoEfficio_dev-tips · GitHub.pdf (699.7K) 0회 다운로드 | DATE : 2021-07-08 14:08:02
- Spring Interceptor혹은 Servlet Filter에서 POST 방식으로 전달된 JSON 데이터 처리하기 _ NHN Cloud Meetup.pdf (221.0K) 0회 다운로드 | DATE : 2021-07-09 09:58:13
관련링크
댓글목록 0
등록된 댓글이 없습니다.