博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springmvc小结(下)
阅读量:6540 次
发布时间:2019-06-24

本文共 6161 字,大约阅读时间需要 20 分钟。

1.@ModelAttribute

1.给共享的数据设置model数据设置,贴在形参上,也可以贴在方法上,设置一个model的key值
2.当controller方法返回一个对象的时候,,缺省值会把当前请求的url作为逻辑视图名称,共享返回对象

 

2.多个对象的传递

//自定义属性注解,用于请求参数转移到对应的对象参数中去     //把一dog.开头的参数封装到dog中     @InitBinder("dog")     public void initBing(WebDataBinder binder){           binder.setFieldDefaultPrefix("dog.");     }          @InitBinder("cat")     public void initBing1(WebDataBinder binder){           binder.setFieldDefaultPrefix("cat.");     }          @RequestMapping("/testmany")     public String test(Cat cat,Dog dog){                      System.out.println(cat);           System.out.println(dog);           return null;     }
catName:
catAge:
DogName:
DogAge:

处理不同的数据可以传递到不同的pojo实现类中。

 

3.处理json

①.单个对象

//@ResponseBody     //处理响应,把对象转为json字符串     //贴在方法上,只针对当前的方法做json处理     //在类上会对当前类的所有方法做json处理          //把单个对象转为json     @RequestMapping("/user1")     @ResponseBody     public User user1(){           User u = new User();           u.setName("MrChegns");           u.setAge(12);           return u;     }

 

②.多个对象

//多个对象          @RequestMapping("/user2")     @ResponseBody     public List
user2(){ List
users = new ArrayList<>(); User u1 = new User("MrChengs",12); User u2 = new User("MrChengs",13); users.add(u1); users.add(u2); return users; }

 注意://返回一个String,把返回的字符串不会当作物理逻辑返回 ,当作json

@RequestMapping(value="/test1",produces=MediaType.APPLICATION_JSON_VALUE)     @ResponseBody     public String test1(){           return "success“;     }

 

4.日期处理

//把请求参数封装成Date字符串     //前台向后台传数据     @RequestMapping("/test1")     public ModelAndView  test(@DateTimeFormat(pattern="yyyy-MM-dd")Date d){           System.out.println(d);           return null;     }

  

 time时的Date类型:

@InitBinder     public void initBind(WebDataBinder binder){           SimpleDateFormat sdf = new SimpleDateFormat();           sdf.applyPattern("yyyy-MM-dd");           binder.registerCustomEditor(java.util.Date.class, new  CustomDateEditor(sdf, true));     }     @RequestMapping("/test2")     public ModelAndView dates(User u){           System.out.println(u);           return null;     }

 

 

配置全局可以使用
新建类:
这个类需要加入到spring容器
@ControllerAdvicepublic class DateformateConfig {     @InitBinder     public void initBind(WebDataBinder binder){           SimpleDateFormat sdf = new SimpleDateFormat();           sdf.applyPattern("yyyy-MM-dd");           binder.registerCustomEditor(java.util.Date.class, new  CustomDateEditor(sdf, true));     }}
@RequestMapping("/test2")     public ModelAndView dates(User u){           System.out.println(u);           return null;     }

得到结果不变

 

jsp页面处理:

 

 后台向前台

public class User {     private String name;     private int age;     //东八区     @JsonFormat(pattern="yyyy-MM-dd  HH:mm:ss",timezone="GMT+8")     private Date time;     ....}
@RequestMapping("/test4")     @ResponseBody     public User user12(){           User u = new User();           u.setAge(12);           u.setName("Mrcheng");           u.setTime(new Date());           return u;     }

 

 

 

 5.拦截器

 

配置

 

 实现类登陆拦截

public class LoginCheckInterceptor implements  HandlerInterceptor{     //登陆判断     @Override     public boolean preHandle(HttpServletRequest request,  HttpServletResponse response, Object handler)                throws Exception {                           if(request.getSession() == null){                     response.sendRedirect(request.getContextPath()+ "/login.jsp");                     return false;                }           return true;     }     @Override     public void postHandle(HttpServletRequest request,  HttpServletResponse response, Object handler,                ModelAndView modelAndView) throws Exception {     }     @Override     public void afterCompletion(HttpServletRequest request,  HttpServletResponse response, Object handler, Exception ex)                throws Exception {     }}

  

 6.异常处理:

①.全局:
springmvc.xml
value的值也是根据逻辑视图的转换来的
//设置错误的默认视图

 

 错误的提示页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8" isErrorPage="true"%>
Insert title hereerror:<%=exception.getMessage() %>

 

 错误页面获取异常信息的变量名称

 

 根据不同类型的异常配置不同的异常

  

 

 7.数据校验

 

 

springmvc.xml中

pojo中

public class User {     private int id;          @NotNull(message="username 不可以为空")     private String username;          @Size(max=5,min=1,message="密码大于1小于5")     private String password; ... }

 

controller类上
BindingResult  必须在 @Valid之后
@RequestMapping("/insertuser")     public String Users(@Valid User user,BindingResult  bindingResult,Model model) throws Exception{                List
es = bindingResult.getAllErrors(); if(es.size() > 0){ model.addAttribute("es", es); return "/insert"; } System.out.println("hellouser"); System.out.println(user); UserMapper um = (UserMapper) getContext().getBean("userMapper"); um.addUser(user); return "redirect:/select/selectall"; }

  

 jsp页面上

${e.defaultMessage}

 

 

更多的可以从参考网上的更多教程.......

 

 8.文件上传

 

1.apache版本
id是固定的
springmvc.xml

 

 jsp页面

name:
file:

  

 controller

@Controllerpublic class FileUpLoad {          @Autowired     private ServletContext servletContext;          @RequestMapping("/upload")     public ModelAndView upload(User user,MultipartFile pic)  throws IOException{           System.out.println(user);           String fileName = pic.getOriginalFilename();           System.out.println(fileName);           String dir = servletContext.getRealPath("/photo");           Files.copy(pic.getInputStream(),Paths.get(dir,  fileName));           return null;     }}

两个同名pic位置  

基本上总结到此结束了.....

转载于:https://www.cnblogs.com/Mrchengs/p/9974237.html

你可能感兴趣的文章
【deep learning学习笔记】注释yusugomori的DA代码 --- dA.h
查看>>
Ubuntu 12.04 root用户登录设置
查看>>
windows核心编程-互斥器(Mutexes)
查看>>
纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!...
查看>>
java 为啥变量名前要加个m?
查看>>
探索Android中的Parcel机制(上)
查看>>
c++ 类型定义
查看>>
C#开发微信门户及应用(5)--用户分组信息管理
查看>>
怎样实现前端裁剪上传图片功能
查看>>
程序员提高工作效率的15个技巧【Facebook】
查看>>
ffmpeg+SDL2实现的视频播放器「退出、暂停、播放」
查看>>
2011/7/3 第二次评审
查看>>
Openvswitch手册(2): OpenFlow Controller
查看>>
Cocos2d-JS项目之二:studio基础控件的使用
查看>>
tar解压
查看>>
inheritprototype原型继承封装及综合继承最简实例
查看>>
【磁耦隔离接口转换器】系列产品选型指南
查看>>
Apriori 关联算法学习
查看>>
二叉树、红黑树、伸展树、B树、B+树
查看>>
Junit核心——测试集(TestSuite)
查看>>