[英]How to specify a fallback request mapping in Spring Boot
我们有一个端点,可以根据Accept标头返回不同的响应。 特别是,它可以返回zip文件,视频文件或音频文件。
映射1:
@RequestMapping(value = "endpoint",
method = RequestMethod.GET,
produces = {"video/*", "audio/*"})
Mappping 2:
@RequestMapping(value = "endpoint",
method = RequestMethod.GET, produces = {"application/zip", "*/*"})
此设置将采用Accept: video/*
并转到映射1(这是我们想要的)。 但是, Accept: video/mp4
导致java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path
异常java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path
。
我video/mp4
期望video/mp4
更接近匹配映射1并加载它。 确实,这正是我们想要的。
我们可以删除*/*
然后Accept: video/mp4
确实转到映射1.但是,我们确实需要*/*
去映射2。
为什么不Accept: video/mp4
匹配映射1,因为这是一个更接近的匹配?
如果没有其他接受标头更接近匹配,我们可以将此端点配置为具有默认方法吗? 然后我们可以让映射1声明它产生application/zip
。
我们正在使用Spring Boot 1.5.3。
为什么不一起删除produces
并在方法中生成Content-Type
,并且还有一个if条件来测试Accepts
请求标头? 您可以根据请求标头调用两种不同的方法。
@RequestMapping(value = "endpoint", method = RequestMethod.GET)
public void doIt(HttpServletRequest request, HttpServletResponse response) {
if (request.getHeader("Accept").matches("application/zip"))
doZip();
else
doVideo();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.