您可以在 Spring MVC 中为单个路径指定首选默认媒体类型吗?

Can you specify preferred default media type for a single path in Spring MVC?

我有一个已转换为 Spring MVC 的 Jersey 应用程序。我看不到直接移植的一项功能是,如果指定了 none,则能够按路径指定首选媒体类型。在 Jersey 中,我可以在媒体类型上指定“qs”属性,如果指定了 none(或者如果在 Accept 中指定了多个选项),它将使用它来确定要发送的响应类型header,我相信此值已乘以指定的质量得分)。

@Produces("application/json")
@GET
@Path("/some/path")
public Response preferredResponseType() {
  //Implementation goes here
}

@Produces({"application/schema+json;qs=0.9"})
@GET
@Path("/some/path")
public Response otherResponseType() {
  //Implementation goes here
}

在此示例中,如果我针对 /some/path 执行 GET 请求而没有接受 header,它将 return application/json 响应。

我在 Spring MVC 中没有看到任何简单的方法来执行此操作,特别是如果我想将默认值限制为仅应用于那个端点(应用程序中还有其他端点应该有不同的首选默认值)。我确实看到有一种方法可以全局设置默认内容类型(根据 ContentNegotiationConfigurer 中的“defaultContentType”和“defaultContentTypeStrategy”方法),但这并不容易解决 per-path 用例。

是否有一种简单的方法来实现 per-path 与应用程序全局默认值不同的媒体类型默认值?

"defaultContentTypeStrategy" 允许提供您自己的 ContentNegotiationStrategy 以供使用。它可以访问完整的请求,因此您可以使用 AntPathMatcher 做出基于路径的决策,以轻松支持模式。

Spring 问题 19050 请求此功能。根据那里的对话,似乎没有简单的方法可以声明性地指定要使用的默认内容类型。此外,Spring 团队决定不实施此功能,从而解决了该问题。