Ответ 1
На основе @Consumes api (http://jsr311.java.net/nonav/releases/1.0/javax/ws/rs/Consumes.html) и спецификации типа HTTP (http://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html#sec7.2.1) в сочетании с поведением, которое вы видите, я думаю, что безопасно завершить следующую реализацию Джерси:
Если Content-Type не установлен клиентом, то Джерси не имеет значения по умолчанию, но позволяет ему передавать любые/все @-консультации аннотации.
Когда для URI задано несколько @Consumes {разных типов}, и клиент НЕ установил Content-Type, то Джерси по умолчанию будет использовать аннотацию @Consumes или первый тип в списке допустимых типов.
Когда значение заголовка Accepts установлено, Джерси найдет наилучший подходящий метод для выполнения. Если несколько методов лучше всего подходят, по умолчанию будет установлено первое.
В заключение @Consumes действует только как фильтр, если и ТОЛЬКО, если клиент устанавливает Content-Type, иначе Джерси попытается найти наилучшее соответствие. Это соответствует спецификации HTTP:
Любое сообщение HTTP/1.1, содержащее тело-сущность, ДОЛЖНО включать поле заголовка Content-Type, определяющее тип носителя этого тела. Если и только если тип материала не задан поле Content-Type, получатель МОЖЕТ попытаться угадать тип носителя путем проверки его содержимого и/или расширений имен URI, используемых для идентификации ресурса. Если тип носителя остается неизвестным, получатель ДОЛЖЕН рассматривать его как тип "приложение/октет-поток".
Если цель состоит в том, чтобы @Consumes выступала в качестве белого списка, тогда фильтр сервлета можно использовать для по умолчанию для Content-Type для запросов, где ни один не установлен.