SpringMVC学习系列(四)------常用注解以及controller返回值

前言

    在SpringMVC中使用了很多的注解来方便我们的开发,在这里做个归纳汇总,方便查阅。

正文

(1)注解

  • @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”,切必须存在,如果后面再定义个默认值,也可以不传参,默认使用默认值作为形参。

  • @RequestBody
    用于读取http请求的内容(字符串),通过SpringMVC提供的HttpMessageConverter接口将读取到的json等数据转换为java对象。
  • @ResponseBody
    用于将Controller方法返回的对象,通过HttpMessageconverter接口转换为指定格式的数据,如json或者xml,通过response响应给客户端。
    以上两个注解可以联合使用,栗子如下:
//请求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;
    }
  • @PathVariable
    将请求url中的模板变量映射到功能处理方法的参数上。栗子如下:
@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方法形参中的参数名一样,可以不指定名称。

  • @Resource
    注入一个bean,默认按照名称注入。
  • **@Autowired
    注入一个bean,它默认是按照对象的类型来注入的,如果我们需要按照名称来注入,可以配合@Qualifier一起使用,比如:
public class TestServiceImol {
    @Autowired
    @Qualifier("userDao")
    private UserDao userDao;
}

(2)controller返回值

    对于controller中的每个方法,我么可以配合注解返回形式多样的结果,达到不用的效果。

  • 返回ModelAndView
        在方法中定义ModelAndView对象返回,对象中可以添加数据model,并且指定view。
  • 返回void
        在controller方法上可以定义request和response,使用request和response来响应返回结果。
    使用request转发页面:request.getRequestDispatcher("页面路径").forward(request, response);
    使用response重定向页面:response.sendRedirect("url")
    使用response响应json:
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方法的返回值的却别进行了回顾,在实际的工作中灵活应用各种注解,能提高我们的开发效率。

猜你喜欢

转载自blog.csdn.net/xiaoyao2246/article/details/80776466