Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringMVC:如何像对待任何请求映射一样对待html后缀_Spring_Model View Controller_Controller - Fatal编程技术网

SpringMVC:如何像对待任何请求映射一样对待html后缀

SpringMVC:如何像对待任何请求映射一样对待html后缀,spring,model-view-controller,controller,Spring,Model View Controller,Controller,我有一个遗留系统和一些url重写规则,我们想摆脱。其中一个要更改的规则是/tools/lookup.html?what=this并将其更改为/tools/search?what=this并实际返回json而不是html 我正试图找到一种方法,使@Controller支持旧格式lookup.html,但它在HTTP 406中失败“此请求标识的资源只能根据请求的“accept”头生成具有不可接受特征的响应。”。我想知道是否有人做过类似的事情 我的控制器方法如下所示: @RequestMapping(

我有一个遗留系统和一些url重写规则,我们想摆脱。其中一个要更改的规则是/tools/lookup.html?what=this并将其更改为/tools/search?what=this并实际返回json而不是html

我正试图找到一种方法,使@Controller支持旧格式lookup.html,但它在HTTP 406中失败“此请求标识的资源只能根据请求的“accept”头生成具有不可接受特征的响应。”。我想知道是否有人做过类似的事情

我的控制器方法如下所示:

@RequestMapping(value = "/tools/lookup.html", method = RequestMethod.GET)
public @ResponseBody Result lookup() {
    return result;
}
提前谢谢
Sylvain

删除reponsebody注释将停止controlle方法返回json。

请仔细查看支持
生成
元素的
@RequestMapping
。例如:

@RequestMapping(value = "/tools/search", produces = "application/json")
@ResponseBody
public Result search(...) { ... }

问题来自spring如何处理pathvariables。默认行为将截断url(.html)中的最后一个点以查找请求映射。 此效果仅对最后一个pathvariable发生

我还没有找到一个全局更改此属性的属性,但是一种方法是告诉您的pathvariable映射使用regex{pathvariable:.+}

@Requestmapping("/somepath/{varwithextention:.+}")
    public String method(@Pathvariable String varwithextension) {
    ...
}


编辑:我看到您甚至不使用PathVar。也许最后一个url部分的效果还是一样的?

Hi终于找到了适合我的东西,请注意,我的应用程序不需要支持真正的html(仅限REST的应用程序),所以这不会有太多副作用。在我的WebMVCConfigureAdapter中,我为html添加了以下媒体类型

@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
    configurer.mediaType("html",MediaType.APPLICATION_JSON);
    configurer.mediaType("html",MediaType.APPLICATION_XML);
    super.configureContentNegotiation(configurer);
}

现在,我将JSON或XML内容返回到客户端。不再出现406错误。

Hi,我实际上想返回json,我的问题是遗留url使用.html,但充当Rest服务。是的,您是对的,删除响应正文注释将阻止返回json。您好,Willie,谢谢您的回答,但运气不好。结果缩小了映射范围,但没有解决我的问题(相同的结果)。我需要告诉Spring忽略normal.html处理并充当一个普通的rest方法。如果我用.toto替换.html,它可以工作,但我无法更改我的旧URL。嗨,Martin,谢谢你的建议,如果我返回void,问题似乎与ResponseBody的交互有关。调用了正确的方法,但我真的希望能够使用ResponseBodyHi,我追溯到AbstractMessageConverterMethodProcessor,似乎因为它以.html结尾,所以即使客户端支持application/json,它也会将唯一支持的类型强制为text/html。我尝试了setUseSuffixPatternMatch(false)和setUserRegisteredSuffixPatternMatch(false),但是读取文档这并不能解决我的问题。