Можете ли вы указать предпочитаемый тип носителя по умолчанию для одного пути в Spring MVC?
У меня есть приложение на Джерси, которое было преобразовано в Spring MVC. Одной из функциональных возможностей, которую я не вижу в способе прямого переноса, является возможность для каждого пути указывать предпочтительный тип носителя, если он не указан. В Джерси я мог бы указать свойство "qs" для типа носителя, и он использовал бы его, чтобы определить, какой тип ответа отправлять, если не указан ни один (или если в заголовке Accept было указано несколько опций, я считаю, что это значение было умножено по указанным показателям качества).
@Produces("application/json")
@GET
@Path("/some/path")
public Response preferredResponse() {
//Implementation goes here
}
@Produces({"application/schema+json;qs=0.9"})
@GET
@Path("/some/path")
public Response preferredResponse() {
//Implementation goes here
}
В этом примере, если я выполню запрос GET для "/some/path" без заголовка Accept, он вернет ответ application/json.
Я не вижу простого способа сделать это в Spring MVC, особенно если я не хочу ограничить применение по умолчанию только одной конечной точкой (в приложении есть другие конечные точки, которые должны иметь другое предпочтительное значение по умолчанию). Я вижу, что есть способ глобально установить тип контента по умолчанию (для методов "defaultContentType" и "defaultContentTypeStrategy" в ContentNegotiationConfigurer), но это не так просто для варианта использования для каждого пути.
Есть ли простой способ добиться этого?
2 ответа
Я подал сообщение об ошибке в Spring ( SPR-14481) по этой проблеме. Согласно разговору, похоже, что простого способа указать тип содержимого по умолчанию для использования не существует.
"DefaultContentTypeStrategy" позволяет предоставить свой собственный ContentNegotiationStrategy для использования. Он имеет доступ к полному запросу, так что вы можете принимать решения на основе пути, возможно, с помощью AntPathMatcher, чтобы легко поддерживать шаблоны.