palantir / conjure-java-runtime

Opinionated libraries for HTTP&JSON-based RPC using Dialogue, Feign, OkHttp as clients and Jetty/Jersey as servers
Apache License 2.0
80 stars 95 forks source link

Retrofit clients use the wrong Content-Type for JSON #1134

Open sfackler opened 5 years ago

sfackler commented 5 years ago

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.

carterkozak commented 5 years ago

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
sfackler commented 5 years ago

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.