내 질문에, 이미 읽은 링 요청의 본문을 어떻게 읽을 수 있습니까?이미 읽었을 때 링 요청 본문을 읽는 중
여기에 배경이 있습니다. 링 응용 프로그램에 대한 오류 처리기를 쓰고 있습니다. 오류가 발생하면 오류를 재생산하고 해결하는 데 필요한 모든 관련 정보를 포함하여 오류를 기록하려고합니다. 중요한 정보 중 하나가 요청의 본문입니다. 그러나 java.io.InputStream
개체의 형식이므로 :body
값의 상태 저장에 문제가 있습니다.
구체적으로 무슨 일 일부 미들웨어 (내 경우에는 ring.middleware.json/wrap-json-body
미들웨어) 등 slurp
반환 빈 문자열 미래를 호출하는 객체의 내부 상태를 변경 몸 InputStream
객체에 slurp
을 수행한다는 것이다. 따라서 요청 본문에서 [본문 내용]이 효과적으로 손실됩니다.
제가 생각할 수있는 유일한 해결책은 시체를 미리 읽을 수 있도록하기 전에 시체를 미리 복사하는 것입니다. 나중에 필요할 수도 있습니다. 나중에이 오류가 발생할 수있는 경우를 대비하여 모든 요청에 대해 일부 작업을 수행하는 것이 어색하기 때문에이 방법이 마음에 들지 않습니다. 더 나은 접근 방법이 있습니까?
내가 취한 접근 방식은'tee-stream'을 기반으로합니다. 고마워, 그리고 'groundhog'. 나는이 대답을 받아 들일 것이고, 나는 나의 접근법을 별도의 대답으로 자세히 설명 할 것이다. –