虽然一直在使用SpringMVC,但是对更多的理解还是知道的很少,也看了许多SpringMVC的工作原理,包括dispathServlet,handler,handlerMapping,如何解析view的,dispathServlet如何初始化的东西,也看了很多,但是对理解层面还是知道的很少,在此,先从如何使用做一个深刻的了解,记录知道的和不知道的SpirngMVC的功能,遇到新的就自动增加,也是给自己一个记录的成长吧。。
SpringMVC的常用注解:
@Controller:带注解类的"控制器",分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解
@RequestMapping 注解为控制器指定可以处理哪些 URL 请求
//method:可以处理请求是get或者post
@RequestMapping(value ="/detail", method = {RequestMethod.POST,RequestMethod.GET})
//path可以和PathVariable将其与URI模板中的参数绑定起来:
@RequestMapping(path ="/detail/{id}", method = {RequestMethod.POST,RequestMethod.GET})
public string test(@PathVariable string id)
@MatrixVariable:矩阵变量,你必须把RequestMappingHandlerMapping类的removeSemicolonContent属性设置为false。该值默认是true的。
//consumes :是可消费的媒体类型,只有当请求头中 Content-Type 的值和我们输入的值相等时候使用
//produces :可生产媒体类型;这样只有当请求头中 Accept 的值与指定可生产的媒体类型中有相同的时候,请求才会被匹配
//params:请求值匹配,缩小范围
// headers:请求头匹配
@RequestMapping(path ="test/{id}", method = RequestMethod.GET,consumes ="aa/aa")
@RequestBody需要接的参数是一个string化的json
@ResponseBody:类是string类型,返回的json
@RestController:创建REST控制器,它结合了@ResponseBody与@Controller注解的功能
@ModelAttribute:注解可被应用在方法或方法参数上
如果放在方法上,会首先去执行该方法,一般会用做公共方法的提取,或者也可以当拦截器使用
@ModelAttribute
public String test(){
return "test" ;
}
@ModelAttribute("entity"):在方法上也可以有值,然后根据对应的值,去寻找对应的实体
public ModelAndView save(HttpServletRequest request,@ModelAttribute("entity")@Valid BillBoard entity, BindingResult result)throws Exception
BindingResult被用于记录数据绑定过程的错误
@SessionAttributes:类级别的,HTTP会话保存模型数据
@CookieValue:注解能将一个方法参数与一个HTTP cookie的值进行绑定。
@RequestHeader:注解能将一个方法参数与一个请求头属性进行绑定
Accept
Accept-Language
Accept-Encoding
Accept-Charset
Keep-Alive
public void test(@RequestHeader("Accept-Encoding")String encoding, @RequestHeader("Keep-Alive")longkeepAlive){//...}
@InitBinder:解决类型转换的问题
@ControllerAdvice:辅助控制器,很多时候配合@ExceptionHandler处理异常(具体还要例如辅助modelAttribute)
接下来会具体讨论使用
参考:http://7xvpsh.com1.z0.glb.clouddn.com/publish/21-3/4-asynchronous-request-processing.html翻译的文档
网友评论