天天看點

SpringMVC 406 (Not Acceptable)問題解決Ajax請求接口報錯“406 (Not Acceptable)”

Ajax請求接口報錯“406 (Not Acceptable)”

Ajax請求接口下發短信驗證碼,短信發送成功,接口回執接受失敗,F12檢視出現錯誤406

浏覽器截圖

SpringMVC 406 (Not Acceptable)問題解決Ajax請求接口報錯“406 (Not Acceptable)”

代碼示例

背景接口

@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的。

結合問題所在,鎖定是請求位址的問題

問題解決
SpringMVC 406 (Not Acceptable)問題解決Ajax請求接口報錯“406 (Not Acceptable)”

<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

繼續閱讀