SpringMVC注解

SpringMVC学习中,了解一些基本常用注解是必不可少的。本文主要对该些注解进行总结。

在总结注解之前,先小结一下SpringMVC接收请求到响应的流程:

  • 用户请求发送到前端控制器DispatcherServlet
  • 前端控制器请求HandlerMapping查找Handler
  • HandlerMapping向前端控制器返回一个执行链,包括一个Handler
  • 前端控制器调用处理器适配器AdaptHandler去执行Handler
  • 处理器适配器去执行Handler
  • Handler执行结束后给处理器适配器返回一个ModelAndView(是SpringMVC的底层对象,包括Model和View)
  • 处理器适配器向前端控制器返回一个ModelAndView
  • 前端控制器请求视图解析器进行视图解析(根据逻辑视图名解析成真正的视图)
  • 视图解析器向前端控制器返回View
  • 前端控制器进行视图渲染(将Model模型数据)填充到request域中
  • 前端控制器向用户响应结果

@Controller:该注解使用在类上,指明该类是一个handler(或Controller)。关于一个handler(Controller)的开发,除了可以通过注解标识,也可以实现Controller接口

// 通过注解开发handler
@Controller
public class bookController {}
// 通过实现Controller接口开发handler
public class bookController implements Controller{
    .......
    .......
}

@RequestMapping:处理请求地址映射的注解

 value,method,consumes,produces,params,headers:

  • value:指定请求的实际地址,指定的地址可以是URI Template 模式
  • method:指定请求的method类型, GET、POST、PUT、DELETE等;
  • consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
  • produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
  • params:指定request中必须包含某些参数值是,才让该方法处理。
  • headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。

URL映射:定义Controller方法对应的url,进行处理器映射使用。如:@RequestMapping("/test")

@RequestMapping("/queryBook")
public ModelAndView queryItems(HttpServletRequest request,bookQueryVo bQueryVo) throws Exception {
		List list = bService.findBooksList(bQueryVo);
		// 返回ModelAndView
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("bookList", list);
		modelAndView.setViewName("book/a");
		return modelAndView;
	}

窄化请求映射:说直接点,就是在原先直接通过某个url访问某一个Controller方法时,该url前面再加上一个路径,便于区分。

如:上诉的URL映射代码中的@RequestMapping("/queryBook"),访问路径是.../queryBook.action,那么如果进行了窄化:该访问路径可能就变成.../test/queryBook,那么在其他的Controller中给某个方法一个url,我依旧可以给queryBook,此时只要窄化的部分保证不一样即可。

@Controller
@RequestMapping("/books")
public class bookController {

	@Autowired
	private bookService bService;
	// 商品信息修改页面的展示
	@RequestMapping(value="/editBook",method= {RequestMethod.POST,RequestMethod.GET})
	public ModelAndView editBook(@RequestParam(value="id",required=true)Integer book_id) throws Exception {
		// 调用service根据商品id查询商品信息
		bookCustom bCustom=bService.findBookById(book_id);
		ModelAndView modelAndView = new ModelAndView();
		/*Listlist=new ArrayList<>();
		list.add(bCustom);*/
		modelAndView.addObject("bookCustom", bCustom);
		modelAndView.setViewName("book/editBook");
		return modelAndView;
	}
}

如上所示,在bookController前面加上了@RequestMapping的注解,此时访问editBook方法时,不在是.../editBook.action,而是.../books/editBook.action

限制http请求方法:如下:

@RequestMapping(value="/editBook",method= {RequestMethod.POST})

该注解规定了请求的方式只能为post请求,如果前端请求使用了restful风格,那么其get,put,delete请求等将被限制,并报错如下所示:

@requestParam:主要用于在SpringMVC后台控制层获取参数,类似name=request.getParameter("name")。有三个常用参数:defaultValue:表示默认值,required:设置boolean值表示是否为必须,value:用来将前端jsp页面中的传入参数与SpringMVC控制层接收参数名做映射:如jsp中,接收参数名为bookId,那么对于这样的参数即可使用@requestParam(value=“id”)booId进行映射既可成功接收。

@ModelAttribute:用于数据回显,springMvc默认回显pojo数据,以pojo的类名首字母小写作为key,存入request,如类名为TestBook,request中就可以取到key为testBook的pojo属性值直接进行回显。

@Validated表示需要校验,BindingResult bindingResult表示对校验后的错误信息进行接收。

@RequestBody:将请求中的json串转化为对象。这里要多说一句,如果请求中的数据不是json格式,是key-value格式,那么不需要使用该注解。

@ResponseBody:将对象转成json输出。下面是@RequestBody和@ResponseBody两个注解的使用:

SpringMVC注解_第1张图片

SpringMVC注解_第2张图片

@PathVariable:用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。

SpringMVC注解_第3张图片

@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。
@PostMapping是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。

以上就是SpringMVC常用到的一些注解,当然还有一大部分注解这里没有提及,请读者自行查阅官方API使用。


注:以上文章仅是个人学习过程总结,若有不当之处,望不吝赐教

你可能感兴趣的:(JavaWeb)