conjure-java-runtime
conjure-java-runtime copied to clipboard
Retrofit clients use the wrong Content-Type for JSON
What happened?
A Retrofit-based client created via Retrofit2Client.create will send Content-Type: application/json; charset=UTF-8 as a header.
What did you want to happen?
The client should send Content-Type: application/json as specified in the Conjure spec: https://github.com/palantir/conjure/blob/master/docs/spec/wire.md#241-content-type-header
The content-type is set by Retrofit's JacksonRequestBodyConverter, so we'd probably need to make our own version.
I don't think this violates the spec, the content-type header can contain parameters[1], which we've considered using to version the conjure wire protocol. Is something breaking based on the presence of parameters?
- https://www.w3.org/Protocols/rfc1341/4_Content-Type.html
The spec seems pretty unambiguous to me:
Otherwise, clients must use
application/json.
It's breaking a Conjure server implementation that was built with an understanding that "must use application/json" meant that the value of the Content-Type header must be application/json.