【发布时间】:2020-03-15 17:45:02
【问题描述】:
我想在 Spring 中解析 HTTP 接受标头以确定是否可以发回 JSON。我正在尝试使用以下代码。
class MediaTypeUtil {
private final static Logger logger = LoggerFactory.getLogger(MediaTypeUtil.class);
static boolean acceptsJson(HttpServletRequest request) {
try {
String accept = request.getHeader("Accept");
MediaType requestType = MediaType.valueOf(accept);
return MediaType.APPLICATION_JSON.isCompatibleWith(requestType);
} catch (InvalidMediaTypeException e) {
logger.debug("MediaType parsing error",e);
return false;
}
}
}
当一个接受标头值为application/json, application/javascript, text/javascript, text/json的请求到达时,我最终会遇到异常
Caused by: org.springframework.util.InvalidMimeTypeException: Invalid mime type "application/json, application/javascript, text/javascript, text/json": Invalid token character ',' in token "json, application/javascript, text/javascript, text/json"
at org.springframework.util.MimeTypeUtils.parseMimeTypeInternal(MimeTypeUtils.java:262)
这段代码是从 Servlet 过滤器中使用的,所以我不能依赖 SpringMVC 注释。
Spring 是否有解析接受头并确定它是否与特定媒体类型兼容的方法?
【问题讨论】:
-
为什么不简单地将注释
@RequestMapping与consumes或produces一起使用? -
顺便说一句:你会得到一个逗号分隔的列表作为接受标题。你可以在
,拆分它并解析它的每一部分 -
此代码位于 servlet 过滤器中,因此可以访问 @RequestMapping,是的,我可以拆分字符串,但我认为此功能已经在 spring 中的某个地方,我宁愿重用它,因为它可能正确处理极端情况。
标签: java spring spring-mvc