Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.7.4
-
None
-
Unknown
Description
I am attempting to provide a custom hypermedia model through the mimetype returned in a response. I would like to ensure that the Content-Type header reflects this while serializing the data according to the best fit message body writer. Unfortunately, this doesn't work. I have tried two approaches:
1. Annotated the service method with @Produces("application/my-type+json")
2. Used a ContainerResponseFilter to set the Content-Type header according to the data type being returned (effectively the same goal as #1)
The result of either approach is not good, but they fail differently.
1. Results in a 404 as the client is sending an accept for application/json
2. The serialization fails with a no message body writer found error
I'd expect both of these approaches to work as follows:
1. CXF determines the best match given the available producers. For example, application/my-type+json is clearly applicable under application/json, so it should match application/json request Accept headers as well as more specific Accept values.
2. The message body writer for application/json should apply to application/my-type+json since the latter is clearly applicable under application/json.
I believe the argument against this request would include a plea for forcing the client to specify exactly what it wants returned and having the server rigidly behave. However, I think this falls under the purview of the Robustness Principle (Be conservative in what you send, be liberal in what you accept). It would be a much better experience to implement something akin to what I have described.