Можете ли вы указать предпочитаемый тип носителя по умолчанию для одного пути в 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, чтобы легко поддерживать шаблоны.

Другие вопросы по тегам