ExtJS3.2+SpringMVC4.0 Form提交后返回json始终是failure,而且有兼容性问题
2014-12-15 16:06
344 查看
经过一段折腾,总算把问题解决了,下面将解决的过程记录下来,希望能给其他人提供些帮助:
返回JSON格式的数据,需要在ApplicationContext.xml中配置,当然网上有两种方法,我用了第一种,即阿里巴巴的fastjson,之前下载的是低版本的,运行时发现有错,因为缺少对spring的支持,最终下载了1.1.40版本(当然版本越高肯定也支持),将下载的fastjson-1.1.40.jar包加入到buildpath中。下面就要配置applicationcontext.xml了,配置代码如下:
<mvc:annotation-driven>
<mvc:message-converters register-defaults="false">
<!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
<bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<!-- 这里顺序不能反,一定先写text/html,不然ie下出现下载提示 -->
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
在SpringMVC的控制层的代码如下:
@RequestMapping("/upload") //这是定义了路由,和本文讲的没什么关系
@ResponseBody //因为我不想返回视图,而是返回一个json数据,那么这边必须要用RespnseBody来注解
//重点来了,下面的方法我之前是用的String来作为返回值,返回内容为Json字符串,虽然Json字符串中也有success:true这个标签,但是前端还是执行到了failure,正确的做法是返回值定义成Object类型,并且通过Map的方式将success和message添加进去,这样到前台就会根据success的值来判断调用是否成功执行了
public Object doUpload(@RequestParam(value = "F_FileType", required = false) String sType,HttpServletRequest request,HttpServletResponse response) throws IOException{
/*下面这一段是文件上传的代码*/
MultipartHttpServletRequest fileRequest = (MultipartHttpServletRequest) request;
MultipartFile file = fileRequest.getFile("F_PicPath");
String path = request.getSession().getServletContext().getRealPath("upload")+"\\"+sType+"\\";
String fileName = file.getOriginalFilename();
//response.setContentType("application/json; charset=UTF-8");
File targetFile = new File(path, fileName);
if (!targetFile.exists()){
targetFile.mkdirs();
}
try{
file.transferTo(targetFile);
}catch(Exception e){
e.printStackTrace();
}
Map<String,Object> map = new HashMap<String, Object>();
map.put("success", false);
map.put("msg", "失败");
return map;
}
返回JSON格式的数据,需要在ApplicationContext.xml中配置,当然网上有两种方法,我用了第一种,即阿里巴巴的fastjson,之前下载的是低版本的,运行时发现有错,因为缺少对spring的支持,最终下载了1.1.40版本(当然版本越高肯定也支持),将下载的fastjson-1.1.40.jar包加入到buildpath中。下面就要配置applicationcontext.xml了,配置代码如下:
<mvc:annotation-driven>
<mvc:message-converters register-defaults="false">
<!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
<bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<!-- 这里顺序不能反,一定先写text/html,不然ie下出现下载提示 -->
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
在SpringMVC的控制层的代码如下:
@RequestMapping("/upload") //这是定义了路由,和本文讲的没什么关系
@ResponseBody //因为我不想返回视图,而是返回一个json数据,那么这边必须要用RespnseBody来注解
//重点来了,下面的方法我之前是用的String来作为返回值,返回内容为Json字符串,虽然Json字符串中也有success:true这个标签,但是前端还是执行到了failure,正确的做法是返回值定义成Object类型,并且通过Map的方式将success和message添加进去,这样到前台就会根据success的值来判断调用是否成功执行了
public Object doUpload(@RequestParam(value = "F_FileType", required = false) String sType,HttpServletRequest request,HttpServletResponse response) throws IOException{
/*下面这一段是文件上传的代码*/
MultipartHttpServletRequest fileRequest = (MultipartHttpServletRequest) request;
MultipartFile file = fileRequest.getFile("F_PicPath");
String path = request.getSession().getServletContext().getRealPath("upload")+"\\"+sType+"\\";
String fileName = file.getOriginalFilename();
//response.setContentType("application/json; charset=UTF-8");
File targetFile = new File(path, fileName);
if (!targetFile.exists()){
targetFile.mkdirs();
}
try{
file.transferTo(targetFile);
}catch(Exception e){
e.printStackTrace();
}
Map<String,Object> map = new HashMap<String, Object>();
map.put("success", false);
map.put("msg", "失败");
return map;
}
相关文章推荐
- ajaxform 提交,返回JSON时,IE提示下载的问题解决
- extjs 中formPanel提交到action后返回json数据到ext中,但是ext页面不进入sucess也不进入failure
- EasyUI的Form表单异步提交问题-ThinkPHP5对EasyUI异步表单不返回json
- 提交form会提示下载用JSON返回的以Action为名字的信息,怎么解决这个问题
- .NET easyui form提交后,返回json数据在IE下弹出下载的问题解决方法
- .NET easyui form提交后,返回json数据在IE下弹出下载的问题解决方法
- jquery序列化form表单使用ajax提交后处理返回的json数据
- extjs 3,struts 动态form 提交action不能自动装配值问题
- struts2 + ajax(由前台的form提交数据到后台,再根据form所调用返回获取的后台json格式的数据返回到前端,然后前端用jquery对json数据进行解析)==》》涉及文件上传的部分
- Extjs4,form提交时emptyText传值问题
- ExtJS同一个form中提交combobox和文件类型的问题
- jQuery Easyui form 提交验证 与 json数据返回结果的处理
- jquery ajax方法提交json格式数据报错,一直返回error问题-已解决
- jquery序列化form表单使用ajax提交后处理返回的json数据
- ThinkPHP3.2版本提交HTTP返回302错误问题
- ExtJs中submit提交表单返回json字符不能再前台显示的解决方法
- Jquery异步提交返回json结果问题
- Extjs上传文件返回json的问题
- 关于extjs中form中嵌套iframe中含form的提交问题
- SpringMVC3.2 处理Ajax请求时返回json字符串的中文乱码问题