700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > multipart实现文件上传和@RestController注解

multipart实现文件上传和@RestController注解

时间:2018-11-15 00:50:04

相关推荐

multipart实现文件上传和@RestController注解

multipart文件上传

1.SpringMVC使用MultipartResolver支持文件上传*

2.这个方案需要commons-fileupload.jar的支持

3.enctype 属性可设置或返回表单内容的 MIME 类型

表单上传文件时,必须要配置

表单的enctype属性默认值为application/x-www-form-urlencoded,它表示上传的为文本

文件上传步骤:

1.pom.xml引入依赖:commons-fileupload

<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency>

2.在springmvc.xml文件中配置:

<!-- 配置上传的bean --><bean id="multipartResolver" class=" org.springframework.monsMultipartResolver"><property name="maxUploadSize" value="9999999"></property><!-- 设置上传文件的最大尺寸--></bean>

3.在Controller完成上传

1.add.jsp

<form controller="user/add" method="post" enctype="multipart/form-data">姓名:<input name="name" type="text"/><br/>密码:<input name="pwd" type="password"/><br/>照片:<input name="photo" type="file"/><br/><input type="submit" value="提交"/><br/></form>

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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.10</version></dependency>

2.在springmvc.xml配置

<!-- 配置注解驱动,同时开启对json(jackson的支持)--><mvc:annotation-driven></mvc:annotation-driven>

3.写controller

@Controller@RequestMapping("/json")public class JsonController {@RequestMapping("/user")@ResponseBodypublic User getUser(){User user = new User("zs", "123");return user;}}

4.浏览器运行效果

@RequestMapping("/json2")@ResponseBody//将方法的返回值写到响应体中,当controller的方法返回一个对象(实体类对象,也可是集合对象),同时标注了@ResponseBody,jackson在后台默默将对象转化为json字符串public List<User> 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 {@Autowiredprivate 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<String, Account> allAcounts = new HashMap<String, Account>();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;}<body>${account.no}:${account.money}</body>

(二)@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;}<body>${user.name}:${user.age}</body>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。