关于spring MVC的一些常见问题,参考我的博客:
http://hw1287789687.iteye.com/admin/blogs/2114627
spring MVC如何返回json呢?
有两种方式:
方式一:使用ModelAndView
@ResponseBody @RequestMapping("/save") public ModelAndView save(SimpleMessage simpleMessage){ //查询时可以使用 isNotNull if(!ValueWidget.isNullOrEmpty(simpleMessage)){ try { //把对象中空字符串改为null ReflectHWUtils.convertEmpty2Null(simpleMessage); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } simpleMessage.setCreateTime(TimeHWUtil.getCurrentTimestamp()); simpleMessage.setHasReply(Constant2.SIMPLE_MESSAGE_HAS_REPLY_NOT_YET); this.simpleMessageDao.add(simpleMessage); Map map=new HashMap(); map.put("result", "success"); return new ModelAndView(new MappingJacksonJsonView(),map); }方式二:返回String
/*** * {"fileName":"20141002125209_571slide4.jpg","path":"D:\\software\\eclipse\\workspace2\\demo_channel_terminal\\upload\\p_w_picpath\\20141002125209_571slide4.jpg"} * @param file * @param request * @param response * @return * @throws IOException */ @ResponseBody @RequestMapping(value = "/upload") public String upload( @RequestParam(value = "p_w_picpath223", required = false) MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException { String content = null; Map map = new HashMap(); if (ValueWidget.isNullOrEmpty(file)) { map.put("error", "not specify file!!!"); } else { System.out.println("request:" + request);// org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest@7063d827 System.out.println("request:" + request.getClass().getSuperclass()); // // System.out.println("a:"+element+":$$"); // break; // } String fileName = file.getOriginalFilename();// 上传的文件名 fileName=fileName.replaceAll("[\\s]", "");//IE中识别不了有空格的json // 保存到哪儿 String finalFileName = TimeHWUtil.formatDateByPattern(TimeHWUtil .getCurrentTimestamp(),"yyyyMMddHHmmss")+ "_" + new Random().nextInt(1000) + fileName; File savedFile = getUploadedFilePath(request, Constant2.UPLOAD_FOLDER_NAME + "/p_w_picpath", finalFileName, Constant2.SRC_MAIN_WEBAPP);// "D:\\software\\eclipse\\workspace2\\demo_channel_terminal\\ upload\\pic\\ys4-1.jpg" System.out.println("[upload]savedFile:" + savedFile.getAbsolutePath()); // 保存 try { file.transferTo(savedFile); } catch (Exception e) { e.printStackTrace(); } ObjectMapper mapper = new ObjectMapper(); map.put("fileName", finalFileName); map.put("path", savedFile.getAbsolutePath()); try { content = mapper.writeValueAsString(map); System.out.println(content); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }// System.out.println("map:"+map); }/* * {"fileName":"20141002125209_571slide4.jpg","path":"D:\\software\\eclipse\\workspace2\\demo_channel_terminal\\upload\\p_w_picpath\\20141002125209_571slide4.jpg"} * */ return content; }
两种方式有什么区别呢?
方式一:使用ModelAndView的contentType是"application/json"
方式二:返回String的 contentType是"text/html"
参考:http://hw1287789687.iteye.com/blog/2128296
http://hw1287789687.iteye.com/blog/2124313