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

  • Post author:
  • Post category:其他


问题:

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 = $(“” + item.name + “”);

$(“#firstType”).append(option);

});

}, “json”);

}

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

6c1555302777729326ca3efa0910d9ec.png

不含.json的返回值

6c1555302777729326ca3efa0910d9ec.png

回答1:

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

6c1555302777729326ca3efa0910d9ec.png

官网提供的解决方案:

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

个人推荐前两种解决方案

回答2:

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

回答3:

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