multipart实现文件上传和@RestController注解
multipart文件上传
1.SpringMVC使用MultipartResolver支持文件上传*
2.这个方案需要commons-fileupload.jar的支持
3.enctype 属性可设置或返回表单内容的 MIME 类型
表单上传文件时,必须要配置
表单的enctype属性默认值为application/x-www-form-urlencoded,它表示上传的为文本
文件上传步骤:
1.pom.xml引入依赖:commons-fileupload
commons-fileupload commons-fileupload 1.3.3
2.在springmvc.xml文件中配置:
3.在Controller完成上传
1.add.jsp
2.Controller
@RequestMapping("/add")
public String add(User user,MultipartFile photo,HttpServletRequest request) {
System.out.println(user);//SpringMVC会自动将普通的字段值映射到User对象
//处理上传
if (photo!=null && photo.getSize()>0) {
String realPath = request.getServletContext().getRealPath("/upload/");
File dir = new File(realPath);
if (!dir.exists()) {
dir.mkdirs();
}
//得到上传的文件名
String filename = photo.getOriginalFilename();
File destFile = new File(dir,filename);//上传后的文件
//向上传后的文件写内容
try {
photo.transferTo(destFile);
//上传成功
user.setPhotopath("upload/"+filename);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return "redirect:/user/list.do";//重定向到list
}
@ResponseBody
从Controller得到json:当controller的方法返回一个对象(实体类对象,也可是集合对象),同时标注了@ResponseBody,jackson在后台默默将对象转化为json字符串
1.SpringMVC处理json的框架是Jackson,要引入Jackson的依赖,需要点击Artifacts将其put into WEB-INF\lib
com.fasterxml.jackson.core jackson-databind 2.9.10
2.在springmvc.xml配置
3.写controller
@Controller
@RequestMapping("/json")
public class JsonController {@RequestMapping("/user")
@ResponseBody
public User getUser(){
User user = new User("zs", "123");
return user;
}
}
4.浏览器运行效果

@RequestMapping("/json2")
@ResponseBody//将方法的返回值写到响应体中,当controller的方法返回一个对象(实体类对象,也可是集合对象),同时标注了@ResponseBody,jackson在后台默默将对象转化为json字符串
public List json2(){return Arrays.asList(new User("zs","123"),new User("ls","123456"),new User("zl","123"));
}
效果

@RestController注解
如果你的控制器,只服务于JSON、XML、多媒体数据等,是REST风格,则通常使用@RestController注解。
@RestController相当于控制器中所有@RequestMapping方法,都使用了@ResponseBody注解。@RestController是一种简化写法。
@RestController = @ResponseBody + @Controller
在微服务开发中,所有的对外服务,一般都使用@RestController
@RestController
@RequestMapping("/test01")
public class Test01Controller {@RequestMapping("/resp")public String resp(){return "张三";}
}
http://localhost:8080/0610-springmvc-001/test01/resp
张三
ModelAttribute
@ModelAttribute向model添加属性和值
@ModelAttribute注解,可以用于方法或方法参数
(一)@ModelAttribute写在方法上
1.@ModelAttribute注解方法,表明这个方法的主要目的用于添加一个或多个model属性。
2.@ModelAttribute注解的方法会在此控制器的所有@RequestMapping方法前执行,
3.一个控制器中允许存在多个@ModelAttribute注解方法。
4.如果@ModelAttribute中没有指定model的名字,则使用默认名(方法返回值类型的首字母小写其他不变)。属性名也可以显示指定
5.@ModelAttribute应用于有返回值的方法和无返回值的方法均可。
无返回值的方法,需要使用model对象显示的设置属性。
有返回值的方法,隐式设置model属性。
@Controller
@RequestMapping("/account")
public class AccountController {@Autowired
private AccountService accountService;@ModelAttribute//model.addAttribute("account",accountService.getAccount(no));
public Account get(@RequestParam String no) {return accountService.getAccount(no);
}@RequestMapping("/getAccount")
public String getAccount(String no){return "account";
}
@Service
public class AccountService {private static Map allAcounts = new HashMap();static {allAcounts.put("001", new Account("001", 1000));allAcounts.put("002", new Account("002", 2000));allAcounts.put("003", new Account("003", 3000));allAcounts.put("004", new Account("004", 4000));allAcounts.put("005", new Account("005", 5000));}public Account getAccount(String no) {return allAcounts.get(no);}
}
public class Account {private String no;private int money;
}
${account.no}:${account.money}
(二)@ModelAttribute写在方法的参数上
@ModelAttribute应用于方法参数,表明这个参数的值,应该从model中获取。
如果在model中没有找到对应名称的对象,则创建一个对象并添加到model中。
如果在model中找到了对应名称的对象,这个对象的属性值应该从request请求参数中按名字
对应去匹配查找。
1
@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/getUser")public String getUser(User user,Model model){model.addAttribute("user", user);return "user";}
}
2
@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/getUser")public String getUser(@ModelAttribute User user){return "user";}
}
public class User {private String name;private int age;
}
${user.name}:${user.age}

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
