Fix: Make JsonResponse use a single response body source#278
Merged
techmahedy merged 1 commit intodoppar:3.xfrom May 6, 2026
Merged
Fix: Make JsonResponse use a single response body source#278techmahedy merged 1 commit intodoppar:3.xfrom
techmahedy merged 1 commit intodoppar:3.xfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
JsonResponse now uses a single buffered body as the source of truth for what gets sent. This removes the old split where the class cached one JSON body while separately streaming another output path.
What changed
Converted JsonResponse into a buffered JSON response that encodes its payload once and sends that exact body
Kept StreamedJsonResponse as the dedicated streaming JSON path and removed its fake prebuilt body cache
Updated
Response::prepareBody()so generic objects are no longer assumed to implementtoArray()Why
This makes JSON response behavior more predictable across the request lifecycle:
getBody() now matches the bytes actually sent for normal JSON responses streamed JSON stays truly streamed instead of pretending to have a cached body arbitrary objects no longer risk failing because Doppar blindly calls toArray() on them
Tests
Added and updated response tests to cover: