使用 springmvc @response 返回 json 报错406

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、付费专栏及课程。

余额充值