Following #23205 I found a similar issue.

If you declare a controller like this:

@GetMapping(path = "/xml", produces = "application/xml")
public Map<String, Object> producesContentTypeThatIsNotSupportedByAnyConverter() {
    return ImmutableMap.of("foo", "bar");
}

And make a request like this (httpie):

http -v :9080/xml

Then the result will be:

GET /xml HTTP/1.1
Accept: */*
...



HTTP/1.1 406
...

AbstractMessageConverterMethodProcessor#writeWithMessageConverters method will throw org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation.

This is very similar case to a case with ResponseEntity - the server is responsible for selecting content-type application/xml (if it is acceptable by a client, and in this case - it is) and no converters found that can write the result using this content-type.

The Accept header was taken into account but it was Accept: */* so it is obviously not "Could not find acceptable representation" case, but more like a "Cound not find http message converter for totally acceptable representation" (application/xml is acceptable for a client, that requsted it with Accept: */*).

So it is strange to receive a 406 result for a request with Accept: */* header. The real problem in this case is a server misconfiguration: the server declares that it produces application/xml, but at the same time it didn't register any HttpMessageConverter that can return this content type. How can this be a 4xx then?

Comment From: membersound

This is a serious problem in reporting error the client users! Could you check if you have any ContentNegotiationConfigurer active, and in case post the configuration?

Comment From: xak2000

This is an empty spring-boot application with one dependency on org.springframework.boot:spring-boot-starter-web and no other custom beans except one controller with one method.

I not remember exact spring-boot version, but it is between 2.1.3 and 2.1.6 I think. Spring 5.1.8.RELEASE.

Comment From: rstoyanchev

@xak2000 your point here is that just like in #23205 this should similarly result in a 500 error because the server choice the media type (client takes any) and failed to write it?

Comment From: rstoyanchev

Tentatively scheduled for 5.2.3.

Comment From: xak2000

@xak2000 your point here is that just like in #23205 this should similarly result in a 500 error because the server choice the media type (client takes any) and failed to write it?

Yes, that is my point. 406 should be returned only when server is unable to select the type requested by a client. But in the mentioned case the server can select it. It just unable to write the response because of server misconfiguration.

Comment From: rstoyanchev

Re-opening, closed in error due to incorrect issue reference from above commit.