我有遗留系统和一些我们想要摆脱的网址重写规则。其中一个是改变的规则是/tools/lookup.html?what=this并将其更改为/ tools / search?what = this并且实际返回json而不是html!
我正在尝试找到一种让@Controller支持遗留格式lookup.html的方法,但它失败了,因为HTTP 406“此请求标识的资源只能生成具有不可接受的特征的响应。请求“接受”标题。“我想知道是否有人做过类似的事情?
我的控制器方法如下:
@RequestMapping(value = "/tools/lookup.html", method = RequestMethod.GET)
public @ResponseBody Result lookup() {
return result;
}
提前致谢 西尔
答案 0 :(得分:1)
删除响应正文注释将停止控制器方法返回json。
答案 1 :(得分:0)
仔细查看支持@RequestMapping
元素的produces
。如,
@RequestMapping(value = "/tools/search", produces = "application/json")
@ResponseBody
public Result search(...) { ... }
答案 2 :(得分:0)
问题来自于春天如何治疗病态变量。默认行为将切断URL(.html)中的最后一个点以查找请求映射。 此效果仅针对最后一个路径变量发生。
我还没有发现一个属性尚未全局更改,但一种方法是告诉你的pathvariable映射使用正则表达式{pathvariable:。+}。
@Requestmapping("/somepath/{varwithextention:.+}")
public String method(@Pathvariable String varwithextension) {
...
}
@Requestmapping("/somepath/{varwithextention:.+}")
public String method(@Pathvariable String varwithextension) {
...
}
编辑:我看到你甚至不使用pathvars。可能它对最后一个url部分的效果仍然相同?
答案 3 :(得分:0)
您好终于找到了适用于我的情况的内容,请注意我的应用不需要支持真正的HTML(仅限REST应用),所以这不应该有太多的副作用。在我的WebMvcConfigurerAdapter中,我为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错误。