【发布时间】:2015-09-02 14:10:41
【问题描述】:
几周以来,我一直在使用 spring-mvc 开发一个 rest api。 REST-API 工作正常,我几乎完成了,直到最后一个问题涉及特定错误对象的错误处理。
REST-API 使用 JSON 作为格式来序列化 Java 对象。当服务执行期间发生错误时,会创建一个特定的错误对象并将其发送回客户端。
当我的休息服务被标记为“produces=application/json”时,一切正常。但也有一些服务只需要使用“produces=text/plain”返回简单的文本。 当这些服务之一发生错误时,Spring-MVC 将抛出 HttpMediaTypeNotAcceptableException。似乎是正确的,因为客户端要求内容类型为“text/plain”,但服务器响应为“application/json”。
你能告诉我这个问题的正确解决方案是什么吗?
仅使用 JSON 作为响应内容类型并将简单文本始终包装在特殊的类对象中。 => 在我看来不像 REST,因为 REST 应该支持多种内容类型。
每个服务“文本”的服务都将被标记为“produces=application/json;text/plain”,并且客户端还需要在“accept-header”中发送两者。 => 当这样做时,API 似乎支持同一资源的两种内容类型。但这不对。只有在出现错误的情况下,API 才会返回 JSON,否则它将始终是“文本”。
对我来说听起来像是一个非常特殊的 REST 问题,但找不到与此主题相关的问题。
【问题讨论】:
-
"当这些服务之一发生错误时,Spring-MVC 将抛出 HttpMediaTypeNotAcceptableException。"你能详细说明一下吗?你的意思是什么类型的错误?
-
Spring 将“accept-header”与响应内容类型进行比较。在accept-header中发送“text/plain”并且响应内容类型不兼容的情况下,Spring将抛出此异常(AbstractMessageConverterMethodProcessor)
标签: java json api rest spring-mvc