【问题标题】:Spring MVC: get content negotiation result in a @ExceptionHandlerSpring MVC:在@ExceptionHandler 中获取内容协商结果
【发布时间】:2015-10-14 13:43:56
【问题描述】:

我想写一个@ExceptionHandler,这样JSON 请求也会在JSON 中得到错误响应。对于非 JSON 请求,我希望 servlet 容器发送其默认的 HTML 响应。

为此,我需要进行一些内容协商。 Spring MVC 通过注解处理普通请求,但是@ExceptionHandlers 没有这样的注解。

我想知道如何以编程方式调用内容协商代码?

【问题讨论】:

  • 听起来很棘手,但您可以在 springSecurityFilterChain 之后创建自定义过滤器添加它。然后根据请求内容你可以修改响应内容。
  • 在第一段中,您描述了您想要一个固定的返回类型(实际上是两个)。但问题是“获取内容协商结果”,它可能不是 JSON 或 HTML。您只需要检查Content-Type 标头是否为application/json(或变体)。然后它是一个 JSON 请求,你返回一个 JSON 响应。

标签: java spring spring-mvc


【解决方案1】:

显然,内容协商发生在调用错误处理程序之后,所以我必须自己完成大部分繁重的工作。

使用的方法是ContentNegotiationManager.resolveMediaTypes(),它给出了一个人必须经历并做出决定的类型列表。

如何做到这一点的例子可以在ContentNegotiatingViewResolver.getMediaTypes()的源代码中找到

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-15
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多