Add @ConsumseJson to contents API. #999
Merged
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.
Motivation:
content-type
in header, Central Dogma returns the response: {"exception":"java.lang.IllegalArgumentException","message":"No suitable request converter found for a @RequestObject 'CommitMessageDto'"}
. This response is quite ambiguous, making it difficult for the client to understand the problem.Modifications:
@ConsumesJson
to each method that usesChangesRequestConverter.class
.FYI
@RequestConverter
is declared on method signatures, Armeria will add an object Resolver. (link)ChangesRequestConverter
tries to parse body from request. Actually,ChangeRequestConverter
delegates toJacksonRequestConvertFunction
.JacksonRequestConverter
validates contents type. (here)content-type
orcontent-type
is notapplication/json
,JacksonRequestConverter
will callRequestConverterFunction.fallthrough()
.With this flow, client will receive response
: {"exception":"java.lang.IllegalArgumentException","message":"No suitable request converter found for a @RequestObject 'CommitMessageDto'"}
.If
@ConsumsJson
is delcared to each method havingChangesRequestConverter.class
on their method signature, Armeria will not try to resolve request without headerContent-Type: application/json
.Result:
@Consume(content-type)
to all REST services class or methods #987.