SpringMVC 406 (Not Acceptable)问题解决

Ajax请求接口报错“406 (Not Acceptable)”

Ajax请求接口下发短信验证码,短信发送成功,接口回执接受失败,F12查看出现错误406

浏览器截图

浏览器请求信息

代码示例

后台接口

	@RequestMapping(value = "/page/serviceCart/sendSmsCheckCode.html")
    @ResponseBody
    public Map<String,Object> smsXxs(String phone, HttpServletRequest request) throws ClientException {
        Map<String,Object> map = new HashMap<>();
        String code = CodeUtil.generateVerifyCode(6);
        String TemplateParam = "{\"code\":\""+code+"\"}";
        String TemplateCode = "SMS_163848296";
        SendSmsResponse response = SmsXsk.sendSms(phone,TemplateParam,TemplateCode);
        map.put("verifyCode",code);
        map.put("phone",phone);
        if( response.getCode().equals("OK")) {
            map.put("isOk","OK");
        }
        return map;
    }

Ajax

function getSmsCheckCode() {
	$.ajax({
		url:'serviceCart/sendSmsCheckCode.html',
		type:'post',
		data:'phone='+userPhone,
		success:function(rs){
			if(rs){
				$("#buttonId").attr("disabled",false);
				alert(rs);
			}
		}
	});
}

查阅资料了解到:

406是HTTP协议状态码的一种,表示无法使用请求的特性来响应请求的网页。一般指客户端浏览器不接受所请求页面的MIME类型。

基于我们使用的是ssm框架,注解使用“@ResponseBody”锁定问题大概存有三种

  1. json所依赖的jar包不存在。
  2. spring和jackson版本对不上
  3. 对应请求的后缀是.html的。

结合问题所在,锁定是请求地址的问题

问题解决web.xml配置文件

<servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>

在web.xml中增加响应后缀配置:.action配置

注:

请求的后缀为.html,会欺骗浏览器当做一个静态网页来解析,是一个简单的SEO优化。但是代码使用了@ResponseBody,返回数据后缀是.json,代码的映射器后缀又是.html;最后浏览器收到数据不知该以哪种类型数据来进行解析,所以就会报406状态码。解决方法将web.xml中的映射器的url-pattern的后缀改为其他的.action,.do或者其他都可以(项目开始很久,不方便更改,在其基础上增加一段响应后缀配置也可以<亲测好使>)。

查阅相关资料链接

  1. https://blog.csdn.net/zhangtxsir/article/details/79521810
  2. https://blog.csdn.net/lkwan123/article/details/73385025
发布了35 篇原创文章 · 获赞 27 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43948057/article/details/89478311