还在弄springmvc的事,又遇到了 @RequestParam 和 @PathVarable的的区别
前者是用来自动注入request中的参数的,如果参数转换出错的话整个请求会报错,所以得指定默认值才行, 而后者是和@requestMapping配合实现路径参数的
还有就是重定向的问题: 默认的InnerResourceResolver 是生成jstlview的,它就可以处理重定向,我们通常action中返回“viewpath”, 只需这样返回“redirect:url” 即可,同理可以使用"forward:action"
但是要是想返回json视图的话就不行了,spring mvc
中可以通过@ResponseBody注解来将返回值直接解析为json然后写到response中,不过需要用到 jackson-mapping-asl
如果想文件上传的话就需要自己定义视图了如
- <bean id="multipartResolver"
- class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
- <!-- one of the properties available; the maximum file size in bytes -->
- <property name="maxUploadSize" value="100000" />
- </bean>
需要依赖两个jar包: apache.commons.fileupload 和apache.commons.io
这样就可以自动注入参数了
如
- @RequestMapping(value = "/form", method = RequestMethod.POST)
- public String handleFormUpload(@RequestParam("name") String name,
- @RequestParam("file") MultipartFile file) {
- if (!file.isEmpty()) {
- byte[] bytes = file.getBytes();
- // 去理上传写文件代码
- }
- @RequestMapping(value = "/multipartFileUpload",method = RequestMethod.POST)
- public String upload2(
- MultipartHttpServletRequest request ,
- @RequestParam("name") String name // 页面上的控件值
- ) throws Exception {
- List<MultipartFile> files = request.getFiles("file");
- for( int i=0; i<files.size() ;i++){
- if(! files.get(i).isEmpty()) {
- logger.info("上传文件:"+files.get(i).getOriginalFilename());
- this.copyFile(files.get(i).getInputStream(), files.get(i).getOriginalFilename());
- }
- }
- logger.info("success");
- return "fileUpload/success";
- }