conjure-java-runtime icon indicating copy to clipboard operation
conjure-java-runtime copied to clipboard

Retrofit clients use the wrong Content-Type for JSON

Open sfackler opened this issue 6 years ago • 2 comments

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.

sfackler avatar Jun 27 '19 22:06 sfackler

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?

  1. https://www.w3.org/Protocols/rfc1341/4_Content-Type.html

carterkozak avatar Jun 27 '19 23:06 carterkozak

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.

sfackler avatar Jun 27 '19 23:06 sfackler