首页 新闻 会员 周边

spring boot框架,使用ajax请求,路径含有“.json”,访问失败,不含时访问成功

0
悬赏园豆:20 [已解决问题] 解决于 2018-11-27 10:23

Controller如下
@Controller
@RequestMapping("/portal/youGouGoods")
public class YouGouGoodsController {

@RequestMapping(value = "getTopCategoryList")
@ResponseBody
public Object getTopCategoryList(YouGouGoodsCondition condition) {
try {
return youGouGoodsService.getTopCategoryList(condition);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}

ajax请求如下:
function initFirstType() {
$.post(ctx+"/portal/youGouGoods/getTopCategoryList.json",{"page":1,"rows":1000}, function(data) {
if (data.length > 0)
$.each(data, function(idx, item) {
var option = $("<option value='" + item.categorySn + "'>" + item.name + "</option>");
$("#firstType").append(option);
});
}, "json");
}

含.json的返回值,这一段没有进入controller

不含.json的返回值

代码羡的主页 代码羡 | 初学一级 | 园豆:69
提问于:2018-11-22 10:19

为什么要加 .json 扩展名?

dudu 5年前

@dudu: 加.json是确保传递给客户端的数据类型是JSON类型

瑾年绝恋醉流苏 5年前
< >
分享
最佳答案
0

经查阅官方文档,发现Spring Boot认为如今的内容协商制度越来越可靠,不需要多写一步".json"来确保传递给客户端的数据格式正确,因此默认禁用后缀模式匹配,意思就是在普通的spring MVC中,/aaa/bbb.json的请求可以匹配到控制器,但是在Spring Boot中,无法匹配控制器。

官网提供的解决方案:
1)直接删掉“.json”
2)如果实在不放心,将/aaa/bbb.json替换为/aaa/bbb?format=json
3)在application.perproties中增加如下配置,就可以继续使用“/aaa/bbb.json”来匹配控制器了
spring.mvc.contentnegotiation.favor-path-extension=true
spring.mvc.pathmatch.use-suffix-pattern=true
4)但第三种操作打开了所有的后缀模式匹配,为了更安全起见,官网还提供了第四种解决方案
spring.mvc.contentnegotiation.favor-path-extension=true
spring.mvc.pathmatch.use-registered-suffix-pattern=true

个人推荐前两种解决方案

代码羡 | 初学一级 |园豆:69 | 2018-11-27 10:21
其他回答(2)
0

post 请求给的是地址,你的控制器的路由地址是“/portal/youGouGoods”,方法的路由地址是“getTopCategoryList”,最后访问的路径“/portal/youGouGoods/getTopCategoryList”,,你加个 .json 干啥。。

画笔灬 | 园豆:920 (小虾三级) | 2018-11-22 11:01

我也不知道,单位的项目就加了“.json",我也很是郁闷,原来的MVC框架下是没有问题的,换成了spring boot框架就出问题了

支持(0) 反对(0) 代码羡 | 园豆:69 (初学一级) | 2018-11-22 11:02

@瑾年绝恋醉流苏: 估计是你们原来的架构上面,方法的路由地址是 “getTopCategoryList.json” 这样,或者在其他地方给他拼上的,不然地址应该不肯能随意多加东西的

支持(0) 反对(0) 画笔灬 | 园豆:920 (小虾三级) | 2018-11-22 13:39

@面具灬: Spring MVC有一个叫“后缀模式匹配”的东东,“.json”是后缀,有没有后缀,都可以匹配到正确的路由

支持(0) 反对(0) 代码羡 | 园豆:69 (初学一级) | 2018-11-27 10:30
0

去掉.json,你在ajax把数据类型加上就行

收获园豆:20
阿雯→ | 园豆:282 (菜鸟二级) | 2018-11-22 11:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册