在SpringMVC中使用了很多的注解来方便我们的开发,在这里做个归纳汇总,方便查阅。
@RequestMapping
通过此注解可以将url映射到某一个方法或者类上,它有个属性是value,可以配置多个,将多个请求映射到同一个方法。此注解也可以作用在类上,用来限制访问此类的所有方法的url。
栗子:
@RequestMapping(value=”login”) 则对应的请求路径为:/login
除了value属性,该注解还有method属性,用来对请求方法类型进行限制。
限定get方法: RequestMapping(method = RequestMethod.GET)
限定POST方法: RequestMapping(method = REquestMethod.POST)
如果两个都配置了,则不管使用post或者get请求,都可以访问到对应的方法。
@RequestParam
这个注解用来处理简单数据类型的绑定,它有个属性value,代表请求参数的名字;还有一个属性required,代表该参数是否必须,默认为true,表示请求中一定要有该参数。还有一个defaultValue属性,代表默认值,表示如果请求中如果没有同名的参数则使用默认值。
栗子:
public String editItem(@RequestParam(value="item_id",required=true) String id) {
}
在上面这个代码中,方法的形参为id,但是使用注解限定了请求中的参数名为”item_id”,切必须存在,如果后面再定义个默认值,也可以不传参,默认使用默认值作为形参。
//请求json响应json
function request_json(){
$.ajax({
type:"post",
url:"${pageContext.request.contextPath }/item/editItemSubmit_RequestJson.action",
contentType:"application/json;charset=utf-8",
data:'{"name":"测试商品","price":99.9}',
success:function(data){
alert(data);
}
});
}
在Controller中可以用如下代码来接受并返回参数:
// 商品修改提交json信息,响应json信息
@RequestMapping("/editItemSubmit_RequestJson")
public @ResponseBody Items editItemSubmit_RequestJson(@RequestBody Items items) throws Exception {
System.out.println(items);
//itemService.saveItem(items);
return items;
}
@RequestMapping("/viewItems/{id}")
public @ResponseBody viewItems(@PathVariable("id") String id,Model model) throws Exception{
//方法中使用@PathVariable获取useried的值,使用model传回页面
//调用 service查询商品信息
ItemsCustom itemsCustom = itemsService.findItemsById(id);
return itemsCustom;
}
如果模板变量中的参数名和controller方法形参中的参数名一样,可以不指定名称。
public class TestServiceImol {
@Autowired
@Qualifier("userDao")
private UserDao userDao;
}
对于controller中的每个方法,我么可以配合注解返回形式多样的结果,达到不用的效果。
request.getRequestDispatcher("页面路径").forward(request, response);
response.sendRedirect("url")
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json串");
①逻辑视图名:
通过配置视图解析器,可以返回一个逻辑视图:
//指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/jsp/item/editItem.jsp
return "item/editItem";
②Redirect重定向:
controller方法返回结果重定向到一个url地址,如修改商品信息后重定向到查询商品列表的方法:
//重定向到queryItem.action地址,request无法带过去
return "redirect:queryItem.action";
redirect跳转相当于response.sendRedirect(),转发后浏览器的地址变为转发后的地址,此时如果要传参数过去,只能在url后面添加参数来传递。如/item/queryItem?...&…..
③forward转发
controller方法执行完成后继续执行另一个方法,如选择商品修改后,页面转向商品的修改页面,要修改商品的ID可以携带过去。
//结果转发到editItem.action,request可以带过去
return "forward:editItem.action";
forward方式相当于“request.getRequestDispatcher().forward(request,response)”,转发后浏览器地址栏还是原来的地址。转发并没有执行新的request和response,而是和转发前的请求共用一个request和response。所以转发前请求的参数在转发后仍然可以读取到。
本文对SpringMVC中常用的注解做了一个归纳,也对controller方法的返回值的却别进行了回顾,在实际的工作中灵活应用各种注解,能提高我们的开发效率。