隐藏

解决SpringMVC返回JSON在IE中变下载的问题

发布:2021/8/5 22:38:33作者:管理员 来源:本站 浏览次数:1310



最近用EasyUI写了一个小项目在火狐中测试一切正常,而在IE中测试的时候只要是采用如下方式提交表单就会出现下载对话框


$("#loginForm").form("submit",{

   url : "${pageContext.request.contextPath}/user/login",

   success : function(data) {

       data = eval("(" + data + ")");

       if (data.success) {

           $.messager.progress({

                text : "登录成功,正在跳转到系统主界面"

           });

           window.location.href = "${pageContext.request.contextPath}/admin/main";

        } else {

           $.messager.alert("提示", "登录失败,错误信息:" + data.message, "error");

        }

   }

})


而采用jQuery的Ajax提交则不会出现下载对话框


$.ajax({

   url : "${pageContext.request.contextPath}/user/login",

   data : {

       loginName : $("#loginName").val(),

       password : $("#password").val()

   },

   success : function(data) {

       if (data.success) {

           $.messager.progress({

                text : "登录成功,正在跳转到系统主界面"

           });

           window.location.href = "${pageContext.request.contextPath}/admin/main";

        } else {

           $.messager.alert("提示", "登录失败,错误信息:" + data.message, "error");

        }

   }

});


服务器端处理代码


@RequestMapping(value = "/user/login", method = RequestMethod.POST)

@ResponseBody

public Map<String, Object> login(String loginName, String password) {

   Map<String, Object> result = new HashMap<>();

   try {

       User user = userService.findByLoginNameAndPassword(loginName, password);

       if (user != null) {

           result.put("success", true);

       } else {

           result.put("success", false);

           result.put("message", "登录名或密码错误");

       }

   } catch (Exception e) {

       result.put("success", false);

       result.put("message", e.getMessage());

   }

   return result;

}


如果将服务端方法的返回值变成String则不会出现问题,但是需要手动生成JSON数据返回而且需要客户端使用evel()来解析。


解决办法:还是继续返回Map,修改SpringMVC配置文件


    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean
                class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>



问题原因:因为SpringMVC返回Map的话数据类型是application/json而返回String则是text/html,通过上面采用jQuery的Ajax提交的代码可知(我上面代码没加dataType),解决的办法就是修改他的数据类型变成text/html即可。