您现在的位置:首页 >> 前端 >> 内容

使用springmvc@response返回json报错406

时间:2017/7/1 9:27:00 点击:

  核心提示:使用springmvc@response返回json报错4061. 需求: 通过 ajax 请求上传文件, 到 controller处理完后, 返回一个封装了结果信息的 VO2. 所踩的坑: 可以正常...

使用springmvc@response返回json报错406

1. 需求: 通过 ajax 请求上传文件, 到 controller处理完后, 返回一个封装了结果信息的 VO

2. 所踩的坑: 可以正常访问 controller, 正常处理完成后 return vo; 看了浏览器 firebug 的 network 访问记录, response状态是406

以下是代码:

// 文件上传
function uploadExcel() {
// 文件上传
var filename = $("#excelFile").val();
if (filename) {
var reg_csv = /[^\.](\.csv)$/i;
if (reg_csv.test(filename)) {
$(this).attr('disabled', true);
$("#uploadExcel").attr('disabled', true);
$("#uploadExcel").attr('class', 'btn gray');
var formData = new FormData();
formData.append("excelFile", $("#excelFile")[0].files[0]);
$.ajax({
url : "fileAddGive.htm",
type : "POST",
data : formData,
processData : false,
contentType : false,
success : function(responseStr) {
if (responseStr.code == "0001")
 {
$.dopAlert(responseStr.msg);
} else if (responseStr.failList
&& responseStr.failList.length > 0) {
$.dopAlert("文件导入完成,失败[" + responseStr.failList + "]");
}
},
error : function(responseStr) {
$.dopAlert("导入失败:未知异常");
}
});
searchAll.fnDraw();
} else {
$.dopAlert('格式不正确,只支持 .csv 类型文件');
// 启用按钮,清空文件选择框内容
$("#btn-delete-promotionFile").click();
$("#uploadExcel").attr('disabled', false);
$("#uploadExcel").attr('class', 'btn blue');
}
} else {
$.dopAlert('没有找到你需要上传的文件');
}
}

以下是 controller:

 /**
     * 文件导入新增充值数据
     */
    @RequestMapping(value = "/fileAddGive",produces="application/json")
    @ResponseBody
    public ReqResultVo fileAddGive(@RequestParam("excelFile") MultipartFile excelFile) {
        ReqResultVo resultVo = new ReqResultVo();
省略代码逻辑
        return resultVo;
    }

以下是 web.xml 的 springmvc 的配置

<servlet>
    <servlet-name>sample</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:conf/spring/spring-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>sample</servlet-name>
    <url-pattern>*.htm</url-pattern>
    <url-pattern>*.json</url-pattern>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

百度了很久,尝试了很多种解决方法,如常见的在 pom 中加 jackson 的依赖,在 springmvc 的注解开启中加 json 的支持,这两种方式能正常访问 controller ,但是没有解决问题.

在@ requestMapping注解上加 produces="application/json" ,这样导致在进入方法之前就报错406

解决方法:

最终尝试把ajax的访问路径url 以 .json结尾,竟然返回成功200,很是不懂,

猜测可能是因为url加上后缀 htm 后, springmvc 会默认把response 的 contentType 设置为text/html

Tags:使用 用S SP PR 
作者:网络 来源:hzq2016的博客
  • 上一篇:String对象方法
  • 下一篇:js支持的ajax