使用 springmvc @response 返回 json 报错406

本文介绍了一个关于使用Ajax进行文件上传时遇到的状态码406问题及其解决方案。通过对Ajax请求路径的修改,成功将状态码从406更改为200,实现了文件的正常上传。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 需求:   通过 ajax 请求上传文件, 到 controller处理完后, 返回一个封装了结果信息的 VO
2. 所踩的坑:  可以正常访问 controller,  正常处理完成后 return vo;   看了浏览器 firebug 的 network 访问记录,  response状态是406
以下是代码:
JS:
// 文件上传
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值