SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器
一、参数的传递
1、简单的参数传递
/* @RequestParam用法:入参名字与方法名参数名不一致时使用{
* value:传入的参数名,required:是否必填,defaultValue:默认值
* }
*/
@RequestMapping("itemEdit")
public ModelAndView itemEdit(@RequestParam(value="id",required=true,defaultValue="1")Integer id){....}
2、Model/ModelMap
/**
* 演示返回String,通过Model/ModelMap返回数据模型
* 跳转修改商品信息页面
* @param id
* @return
*/
@RequestMapping("itemEdit")
public String itemEdit(@RequestParam("id")Integer ids,Model m,ModelMap model){
//查询商品信息
Item item = itemServices.getItemById(ids);
//通过Model把商品数据返回页面
model.addAttribute("item", item);
//返回String视图名字
return "itemEdit";
}
3、pojo与包装pojo
要点:表单提交的name属性必需与pojo的属性名称一致。
/**
* 演示传递pojo参数
* 更新商品信息
* @return
*/
@RequestMapping("updateItem")
public String updateItem(Item item,Model model){
//更新商品
itemServices.update(item);
//返回商品模型
model.addAttribute("item", item);
//返回担任提示
model.addAttribute("msg", "修改商品成功");
//返回修改商品页面
return "itemEdit";
}
4、自定义参数绑定
①自定义转换器
/**
* 日期转换器
* S:source 要转换的源类型
* T:目标,要转换成的数据类型
* @author Steven
*/
public class DateConvert implements Converter<String, Date> { @Override
public Date convert(String source) {
Date result = null;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
result = sdf.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
}
② 配置日期转换器
<!-- 配置注解驱动,相当于同时使用最新处理器映射跟处理器适配器,对json数据响应提供支持 -->
<!-- 使用自定义转换器 -->
<mvc:annotation-driven conversion-service="MyConvert" /> <!-- 定义转换器 -->
<bean id="MyConvert" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.cenobitor.springmvc.utils.DateConvert" />
</set>
</property>
</bean>
5、数组参数传递
@RequestMapping("/queryItem")
public String queryItem(QueryVo vo,Integer[] ids){
System.out.println(vo);
if (ids != null && ids.length > 0){
for (Integer id : ids) {
System.out.println(id);
}
}
return "itemList";
}
二、Controller方法返回值
1、返回ModelAndView
@RequestMapping("itemList")
public ModelAndView queryItemList(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("itemList");
List<Item> list = itemService.getItemList();
modelAndView.addObject("itemList",list);
return modelAndView;
}
2、返回void:使用原始的request、response处理
3、返回String
①返回视图的名字
②转发,跳转action
@RequestMapping(value = "updateItem",method = RequestMethod.POST)
public String updateItem(Item item, Model model){
model.addAttribute("item",item);
return "forward:/itemEdit.action";
}
③重定向,跳转action
return "redirect:/itemEdit.action";
三、json数据交互
1、依赖jar包
jackson-annotation-2.4.0.jar
jackson-cort-2.4.0.jar
jackson-databind-2.4.2.jar
2、代码演示
/**
* json数据交互演示
* @param item2
* @return
*/
@RequestMapping("getItem")
//@ResponseBody把pojo转成json串响应用户
@ResponseBody
//@RequestBody用于接收用户传入json串转成pojo
public Item getItem(@RequestBody Item item2) {
System.out.println("接收到的json商品数据为:" + item2);
Item item = itemServices.getItemById(3);
return item;
}
四、异常处理
1、需实现HandlerExceptionResolver
/**
* 全局异常处理器
* @author Steven
*
*/
public class CustomerException implements HandlerExceptionResolver { @Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object hanlder,
Exception e) {
//记录日志
e.printStackTrace();
//错误消息
String msg = "很抱歉,系统发生异常了,请联系管理员"; //响应用户错误提示
ModelAndView mav = new ModelAndView();
//返回错误消息
mav.addObject("msg", msg);
//响应错误提示页面
mav.setViewName("msg");
return mav;
}
}
2、在springmvc.xml中配置全局异常处理器
<!-- 配置全局异常处理器 -->
<bean class="com.cenobitor.exception.CustomerException"/>
五、图片上传
1、需要支持的jar包
commons-fileupload-1.2.2.jar
commons-io-2.4.jar
2、配置多媒体解析器
<!-- 配置多媒体处理器 -->
<!-- 注意:这里id必须填写:multipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 最大上传文件大小 -->
<property name="maxUploadSize" value="8388608" />
</bean>
3、注意事项
① 表单需添加enctype="multipart/form-data" 属性
② controller层接收的入参需要添加MultipartFile picFile,其中picFile为表单中对应的文件name属性名。
③ 保存图片使用绝对路径,访问使用虚拟路径
4、controller代码
@RequestMapping(value = "updateItem", method = { RequestMethod.POST, RequestMethod.GET })
public String updateItem(Item item, Model model, MultipartFile picFile) throws Exception {
// 图片新名字
String name = UUID.randomUUID().toString();
// 图片原名字
String oldName = picFile.getOriginalFilename();
// 后缀名
String exeName = oldName.substring(oldName.lastIndexOf("."));
File pic = new File("D:\\WebWork\\" + name + exeName);
// 保存图片到本地磁盘
picFile.transferTo(pic);
// 更新商品图片信息
item.setPic(name + exeName);
itemServices.update(item);
model.addAttribute("item", item);
model.addAttribute("msg", "修改商品成功");
return "itemEdit";
}
六、拦截器
1、需实现HandlerInterceptor
/**
* 自定义拦截器
* @author Steven
*
*/
public class MyInterceptor1 implements HandlerInterceptor { //在preHandle方法返回true并且Controller方法完全执行完后被执行
//处理异常、记录日志
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("MyInterceptor1.afterCompletion.....");
} //在Controller方法执行后,返回ModelAndView之前被执行
//设置或者清理页面共用参数等等
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("MyInterceptor1.postHandle.....");
} //在Controller方法执行前被执行
//登录拦截、权限认证等等
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println("MyInterceptor1.preHandle....."); //返回true放行,false拦截
return true;
} }
2、在springmvc.xml配置拦截器
<!-- 拦截器定义 -->
<mvc:interceptors>
<!-- 定义一个拦截器 -->
<mvc:interceptor>
<!-- path配置</**>拦截所有请求,包括二级以上目录,</*>拦截所有请求,不包括二级以上目录 -->
<mvc:mapping path="/**"/>
<bean class="com.cenobitor.springmvc.interceptor.MyInterceptor1" />
</mvc:interceptor>
</mvc:interceptors>
SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器的更多相关文章
- SpringMVC的@RequestMapping和Controller方法返回值
本节内容: @RequestMapping Controller方法返回值 一.@RequestMapping 通过@RequestMapping注解可以定义不同的处理器映射规则. 1. URL路径映 ...
- SpringMVC第五篇【方法返回值、数据回显、idea下配置虚拟目录、文件上传】
Controller方法返回值 Controller方法的返回值其实就几种类型,我们来总结一下-. void String ModelAndView redirect重定向 forward转发 数据回 ...
- SprimgMVC学习笔记(五)—— Controller方法返回值
一.返回ModelAndView controller方法中定义ModelAndView对象并返回,对象中可添加model数据.指定view. /** * 查询商品列表 * @return */ @R ...
- Controller方法返回值
1. 返回ModelAndView controller方法中定义ModelAndView对象并返回,对象中可添加model数据.指定view. //入门程序 第一 包类 + 类包 + 方法名 @Re ...
- springMVC整理04--文件上传 & 拦截器 & 异常处理
1. 文件上传 SpringMVC 的文件上传非常简便,首先导入文件上传依赖的 jar: <!-- 文件上传所依赖的 jar 包 --> <dependency> <g ...
- SpringMvc(四)- 下载,上传,拦截器
1.图片下载 图片下载:将服务器端的文件以流的形式写到客户端,通过浏览器保存到本地,实现下载: 1.1 图片下载步骤 1.通过session获取上下文对象(session.getServletCont ...
- SpringMVC中 controller方法返回值
1)ModelAndView @RequestMapping(value="/itemEdit") public ModelAndView itemEdit(){ //创建模型视图 ...
- Spring MVC中 controller方法返回值
1.返回ModelAndView 定义ModelAndView对象并返回,对象中可添加model数据.指定view 2.返回String 1.表示返回逻辑视图名 model对象通过 model.add ...
- @RequestMapping与controller方法返回值介绍
@RequestMapping url映射:定义controller方法对应的url,进行处理器映射使用.@RequestMapping(value="/item")或@Reque ...
随机推荐
- Flask从入门到精通之数据模型之间的关系
关系型数据库使用关系把不同表中的行联系起来.上篇随笔中介绍的用户和角色之间是一种简单的关系.即角色到用户的一对多关系,因为一个角色可属于多个用户,而每个用户都只能有一个角色.这种关系在模型中的表示方法 ...
- 经典MVC框架技术-struts2基础知识
Struts2框架简介 struts2框架是在struts1和webwork技术的基础上,进行合并的全新框架,struts2以Webwork为核心,采用拦截器来处理用户的请求,这样的设计使得业务逻辑控 ...
- java API连接虚拟机上的hbase
今天用本地的eclipse连接虚拟机上的hbase数据库,代码如下: public static void main(String[] args) throws Exception{ Configur ...
- "|",“.”,"include"在jade中的用法(原样输出)
我们知道, body --><body> abc --><abc></abc> --></body> 如果我们想直接输入内容怎么办呢: ...
- 剑指offer二十一之栈的压入、弹出序列
一.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...
- (转)在 WebSphere Application Server 中修改主机名称并迁移概要文件
原文:https://www.ibm.com/developerworks/cn/websphere/techjournal/0905_webcon/0905_webcon.html 修改主机名 让我 ...
- 将之前的DotNetOpenAuth项目发布到IIS
首先需要安装IIS: 控制面板\程序--打开或关闭Windows功能: 默认的不会全选的,需要手动展开选择,能选就全选上吧,特别是asp.net选项,不选的话发布的网站也运行不了. 安装完后需要注册a ...
- 《LeetBook》leetcode题解(15):3Sum[M]
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- Android RecyclerView的使用
RecyclerView是什么? RecyclerView是一种新的视图组件,目标是为任何基于适配器的视图提供相似的渲染方式.它被作为ListView和GridView控件的继承者,在最新的suppo ...
- Android Studio打开项目提示找不到sdk路径的问题。
问题如图: 这是由于所打开的项目不是本机创建的,所使用的sdk路径不一致所导致. 解决方案: 打开项目所在目录,找到local.properties文件并打开,发现sdk.dir=D\:\\Andro ...