Câu hỏi của tôi là, làm cách nào tôi có thể đọc được phần thân của yêu cầu Ring nếu nó đã được đọc?Đọc chuông yêu cầu nội dung khi đã đọc
Đây là nền. Tôi đang viết một trình xử lý lỗi cho một ứng dụng Ring. Khi xảy ra lỗi, tôi muốn ghi lại lỗi, bao gồm tất cả thông tin có liên quan mà tôi có thể cần để tạo lại và sửa lỗi. Một phần thông tin quan trọng là phần thân của yêu cầu. Tuy nhiên, trạng thái của giá trị :body
(vì nó là một loại đối tượng java.io.InputStream
) gây ra sự cố.
Cụ thể, những gì xảy ra là một số trung gian (các ring.middleware.json/wrap-json-body
middleware trong trường hợp của tôi) làm một slurp
trên đối tượng cơ thể InputStream
, làm thay đổi trạng thái nội bộ của đối tượng mà các cuộc gọi trong tương lai để slurp
trở lại một chuỗi rỗng. Do đó, nội dung [nội dung của] bị mất hiệu quả từ bản đồ yêu cầu.
Giải pháp duy nhất tôi có thể nghĩ là phải sao chép trước đối tượng InputStream
đối tượng trước khi có thể đọc được nội dung, chỉ trong trường hợp tôi có thể cần nó sau này. Tôi không thích cách tiếp cận này bởi vì có vẻ vụng về để làm một số công việc trên mọi yêu cầu chỉ trong trường hợp có thể có lỗi sau này. Có cách tiếp cận tốt hơn không?
Cách tiếp cận tôi thực hiện dựa trên 'tee-stream'. Cảm ơn vì điều đó, và cho 'groundhog'. Tôi chấp nhận câu trả lời này, và tôi sẽ trình bày chi tiết cách tiếp cận của tôi trong một câu trả lời riêng biệt. –