spring-projects / spring-projects/spring-framework

Append "*/*" To The defaultContentTypes List

Open
#26,701 5 comments 0 reactions 1 assignee View on GitHub

@rstoyanchev is already working on this.

Since Mar 22, 2021.

in: web type: enhancement
Dominant language
Java
Stars
60.2k
Forks
38.8k
Avg merge
5d 2h
Merged PRs (30d)
27

Description

If a default content type is set in the ContentNegotiationConfigurer, endpoints that don't return that type can return a 406. I've attached a very simple example.

demo.zip

Bug Explanation:
For an endpoint that produces some other content type (example in attached code is text/plain):

  • Making a request without an Accept header will result in a 406
  • Making a request with an Accept header of '*/*' will result in a 406
  • Making a request with an Accept header of 'garbage/garbage,*/*' will result in 200

This behavior is wrong -- All of these should return a 200. Setting a default content type should not cause endpoints to result in 406. At a minimum, accept headers of 'garbage/garbage,*/*' and '*/*' should behave the same..

Extra explanation
Why are we setting a default content type? Because for nearly all endpoints, we want the returned content to be available as XML or JSON, and default to JSON if nothing else is specified.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.