Given a basic configuration for content negotiation:
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"
p:favorPathExtension="false" p:mediaTypes-ref="negotiableMediaTypes"
/>
<util:properties id="negotiableMediaTypes">
<prop key="fo">application/fo+xml</prop>
<prop key="json">application/json</prop>
<prop key="xml">text/xml</prop>
</util:properties>
When a request comes in with several media types, like "text/xml;q=0.8, application/xml;q=0.7, ..." the content negotiation manager's default org.springframework.web.accept.MappingMediaTypeFileExtensionResolver fails to connect "text/xml;q=0.8" to "text/xml" within resolveFileExtensions(MediaType).
The map lookup uses the MediaType with the quality parameter. MediaType's equals is implemented in MimeType:
public boolean equals(@Nullable Object other) {
return (this == other || (other instanceof MimeType otherType &&
this.type.equalsIgnoreCase(otherType.type) &&
this.subtype.equalsIgnoreCase(otherType.subtype) &&
parametersAreEqual(otherType))); // XXX
}