Spring Controller与jQuery Ajax交互时出现POST请求方法不支持错误
解决Spring Controller返回JSON时的"Request method 'POST' not supported"错误
我来帮你梳理下这个问题的原因和解决办法:
首先,你遇到的这个错误核心是前端请求方法和Spring Controller允许的请求方法不匹配。看你的前端代码,Ajax用的是type:'get'(也就是GET请求),但你的Spring Controller里的@RequestMapping应该是限制了只能接受POST请求,所以才会抛出POST方法不支持的错误。
下面给你两种可行的解决思路:
思路一:修改前端请求方法为POST
如果你的Controller确实需要用POST来处理这个请求,直接把Ajax的请求类型改成post就行:
function fnMicEdit(){ var value=$( 'input[name=check]:checked' ).val(); alert(value); $.ajax({ type:'post', // 这里把get改成post url:'getMicModule.htm', data:{radiovalue:value}, dataType: "json", cache:false, success : function(data) { $("#popup").html(data); }, error:function(){ alert('error'); } }); }
注意:如果你的项目开启了Spring Security的CSRF保护,POST请求需要额外带上CSRF令牌,不然会被拦截。可以通过页面里的隐藏域获取令牌,然后加到Ajax的请求参数里。
思路二:修改Controller允许GET请求
如果业务逻辑允许用GET请求,调整Controller的@RequestMapping配置,让它接受GET请求:
// 方式1:明确指定接受GET请求 @RequestMapping(value="/getMicModule", method=RequestMethod.GET) @ResponseBody // 重点!必须加这个注解,否则Spring会把返回值当成视图名,不会转成JSON public MicModuleDTO getMicModule(@RequestParam("radiovalue") String radiovalue) { // 这里写你的业务逻辑,返回要转成JSON的对象 MicModuleDTO dto = new MicModuleDTO(); // 给dto赋值... return dto; } // 方式2:不指定method,默认接受所有请求方法(GET/POST等) @RequestMapping(value="/getMicModule") @ResponseBody public MicModuleDTO getMicModule(@RequestParam("radiovalue") String radiovalue) { // 业务逻辑... return dto; }
这里一定要注意@ResponseBody注解,很多人会漏掉它,导致Spring不会把返回的对象转成JSON,反而去查找对应的视图页面,这也是常见的坑。
额外检查点
- URL路径匹配:前端请求的url是
getMicModule.htm,Controller的value是/getMicModule,要确保项目的DispatcherServlet映射规则支持.htm后缀,或者把前端的url改成/getMicModule(去掉.htm)。 - 参数接收:Controller里的
@RequestParam("radiovalue")要和前端data里的radiovalue参数名一致,不然会接收不到参数。
内容的提问来源于stack exchange,提问作者user6683299
相关产品推荐
相关产品推荐

