首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

spring mvc 系列3 返回JSON以及文件下传

2012-10-06 
spring mvc 系列3 返回JSON以及文件上传先来看下spring mvc提供返回为json数据的注解/** ** @功能模块: ad

spring mvc 系列3 返回JSON以及文件上传
先来看下spring mvc提供返回为json数据的注解

/** *  * @功能模块: add * @方法说明: 添加一个对象 * @version: 1.0 * @param goodsType *            GoodsTypeModel * @return Object spring 自动转换成 json 数据 * @throws */@RequestMapping(params = "method=add")@ResponseBodypublic Object add(@ModelAttribute("goodsType") GoodsTypeModel goodsType) {return this.goodsTypeService.add(goodsType);// 返回的对象为:GoodsTypeModel}

返回头部content-type为:application/json


文件上传:
/** *  * @功能模块: add * @方法说明: 处理 method=add 请求, 添加商品信息 * @version: 1.0 * @param goodsInfo *            商品信息对象,由spring自动获取 * @param model * @return ModelMap 由spring自动生成json数据 * @throws IOException  * @throws */@RequestMapping(params = "method=add")//@ResponseBodypublic void add(@ModelAttribute("goodsInfo") GoodsInfoModel goodsInfo,HttpServletResponse response) throws IOException {if (!goodsInfo.getMpFile().isEmpty()) {goodsInfo.setGiImg(FileUploadUtil.saveFileUpload(goodsInfo.getMpFile(),GoodsInfoModel.DEFAULT_FILE_UPLOAD_DIR));}this.goodsInfoService.add(goodsInfo);//return this.goodsInfoService.add(goodsInfo);// EXT 文件上传时,要返回的头部信息类型为 text/html,// 而用@ResponseBody返回的头部信息为application/json所以自动转换类型// 由于本人能力有限,不知道如果要用@ResponseBody的时候怎么转换,呵呵JsonUtil.printJSON(response, new Result());}/* * 多文件上传时,请使用:DefaultMultipartHttpServletRequestpublic String add(@ModelAttribute("goodsInfo") GoodsInfoModel goodsInfo, DefaultMultipartHttpServletRequest multipartRequest){List<MultipartFile> mpFiles = multipartRequest.getFiles("mpFile");String fileNames = null;for(MultipartFile mpFile : mpFiles){if( ! mpFile.isEmpty()){if(fileNames!=null){fileNames += "," + FileUploadUtil.saveFileUpload(mpFile, GoodsInfoModel.DEFAULT_FILE_UPLOAD_DIR);}else{fileNames = FileUploadUtil.saveFileUpload(mpFile, GoodsInfoModel.DEFAULT_FILE_UPLOAD_DIR);}}}goodsInfo.setGiImg(fileNames);this.goodsInfoService.add(goodsInfo);return "redirect:/Product.do?method=list";}*/


EXT from 如果提交时添加:fileUpload: true 也就是文件上传时,要求返回的响应头部content-type为:text/html,而@ResponseBody返回的响应头部为:application/html 这时浏览器会要求选择打开XX文件的选项,如要防止此种情况产生,必须修改返回类型为:text/html 用@ResponseBody 本人还没找到解决方法,如有高人,请亮下方法,呵呵。

富文本编辑器本人用的是FCK。配置见 web.xml
根目录:WebRoot/fckeditor,
在EXT中,用的是html方式引入:
var htmleditorstr = '<div>' +
'<input type="hidden" id="giDescription___Config" value="" style="display:none" />' +
'<iframe name="giDescription___Frame" id="giDescription___Frame" ' +
'src="../fckeditor/editor/fckeditor.html?InstanceName=giDescription" ' +
'width="100%" height="400px″ frameborder="0″ scrolling="no"></iframe></div>';@RequestMapping(params = "method=login")public ResponseEntity<String> doFirst(@RequestParam("u") String u,@RequestParam("p") String p,HttpSession session,ModelMap model){HttpHeaders headers = new HttpHeaders();MediaType mt=new MediaType("text","html",Charset.forName("gbk"));headers.setContentType(mt);ResponseEntity<String> re=null;String return = new String("test");re=new ResponseEntity<String>(return,headers, HttpStatus.OK);return re; } 这样可以自定义  返回的响应头部content-type@RequestMapping(params = "method=login")public ResponseEntity<String> doFirst(@RequestParam("u") String u,@RequestParam("p") String p,HttpSession session,ModelMap model){HttpHeaders headers = new HttpHeaders();MediaType mt=new MediaType("text","html",Charset.forName("gbk"));headers.setContentType(mt);ResponseEntity<String> re=null;String returnString = new String("test");re=new ResponseEntity<String>(returnString, headers, HttpStatus.OK);return re; } 这样可以自定义  返回的响应头部content-type


非常感谢 Jophy 童鞋, 问题解决了。@RequestMapping(params = "method=login")public ResponseEntity<String> doFirst(@RequestParam("u") String u,@RequestParam("p") String p,HttpSession session,ModelMap model){HttpHeaders headers = new HttpHeaders();MediaType mt=new MediaType("text","html",Charset.forName("gbk"));headers.setContentType(mt);ResponseEntity<String> re=null;String return = new String("test");re=new ResponseEntity<String>(return,headers, HttpStatus.OK);return re; } 这样可以自定义  返回的响应头部content-type


没必要那么麻烦,直接用
    @RequestMapping(params = "method=add")      @ResponseBody      public String add(@ModelAttribute("goodsInfo") GoodsInfoModel goodsInfo,              HttpServletResponse response) throws IOException {        // ...        return "{success:true}";    }
12 楼 muqingren 2011-03-16   这个学习了,歇息

热点排行