您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 园林工程 > SpringMVC九大常用注解
SpringMVC常用注解11、、@Controller@Controller在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model,然后再把该Model返回给对应的View进行展示。在SpringMVC中提供了一个非常简便的定义Controller的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller标记一个类是Controller,然后使用@RequestMapping和@RequestParam等一些注解用以定义URL请求和Controller方法之间的映射,这样的Controller就能被外界访问到。此外Controller不会直接依赖于HttpServletRequest和HttpServletResponse等HttpServlet对象,它们可以通过Controller的方法参数灵活的获取到。22、、@RequestMapping@RequestMappingRequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。RequestMapping注解有六个属性,下面我们把她分成三类进行说明(下面有相应示例)。1、value,method;value:指定请求的实际地址,指定的地址可以是URITemplate模式(后面将会说明);method:指定请求的method类型,GET、POST、PUT、DELETE等;2、consumes,producesconsumes:指定处理请求的提交内容类型(Content-Type),例如application/json,text/html;produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;3、params,headersparams:指定request中必须包含某些参数值是,才让该方法处理。headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。一般用简单的就可以了或:@RequestMapping中还支持通配符“*”@RequestMapping标记的处理器方法支持的方法参数和返回类型1.支持的方法参数类型(1)HttpServlet对象,主要包括HttpServletRequest、HttpServletResponse和HttpSession对象。这些参数Spring在调用处理器方法的时候会自动给它们赋值,所以当在处理器方法中需要使用到这些对象的时候,可以直接在方法上给定一个方法参数的申明,然后在方法体里面直接用就可以了。但是有一点需要注意的是在使用HttpSession对象的时候,如果此时HttpSession对象还没有建立起来的话就会有问题。(2)Spring自己的WebRequest对象。使用该对象可以访问到存放在HttpServletRequest和HttpSession中的属性值。(3)InputStream、OutputStream、Reader和Writer。InputStream和Reader是针对HttpServletRequest而言的,可以从里面取数据;OutputStream和Writer是针对HttpServletResponse而言的,可以往里面写数据。(4)使用@PathVariable、@RequestParam、@CookieValue和@RequestHeader标记的参数。(5)使用@ModelAttribute标记的参数。(6)java.util.Map、Spring封装的Model和ModelMap。这些都可以用来封装模型数据,用来给视图做展示。(7)实体类。可以用来接收上传的参数。(8)Spring封装的MultipartFile。用来接收上传文件的。(9)Spring封装的Errors和BindingResult对象。这两个对象参数必须紧接在需要验证的实体对象参数之后,它里面包含了实体对象的验证结果。2.支持的返回类型(1)一个包含模型和视图的ModelAndView对象。(2)一个模型对象,这主要包括Spring封装好的Model和ModelMap,以及java.util.Map,当没有视图返回的时候视图名称将由RequestToViewNameTranslator来决定。(3)一个View对象。这个时候如果在渲染视图的过程中模型的话就可以给处理器方法定义一个模型参数,然后在方法体里面往模型中添加值。(4)一个String字符串。这往往代表的是一个视图名称。这个时候如果需要在渲染视图的过程中需要模型的话就可以给处理器方法一个模型参数,然后在方法体里面往模型中添加值就可以了。(5)返回值是void。这种情况一般是我们直接把返回结果写到HttpServletResponse中了,如果没有写的话,那么Spring将会利用RequestToViewNameTranslator来返回一个对应的视图名称。如果视图中需要模型的话,处理方法与返回字符串的情况相同。(6)如果处理器方法被注解@ResponseBody标记的话,那么处理器方法的任何返回类型都会通过HttpMessageConverters转换之后写到HttpServletResponse中,而不会像上面的那些情况一样当做视图或者模型来处理。(7)除以上几种情况之外的其他任何返回类型都会被当做模型中的一个属性来处理,而返回的视图还是由RequestToViewNameTranslator来决定,添加到模型中的属性名称可以在该方法上用@ModelAttribute(“attributeName”)来定义,否则将使用返回类型的类名称的首字母小写形式来表示。使用@ModelAttribute标记的方法会在@RequestMapping标记的方法执行之前执行。33、、@Resource@Resource和和@Autowired@Autowired@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。1、共同点两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。2、不同点(1)@Autowired@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:(2)@Resource@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。注:最好是将@Resource放在setter方法上,因为这样更符合面向对象的思想,通过set、get去操作属性,而不是直接去操作属性。@Resource装配顺序:①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。44、、@ModelAttribute@ModelAttribute和和@SessionAttributes@SessionAttributes代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。@SessionAttributes即将值放到session作用域中,写在class上面。55、、@PathVariable@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。如:66、、@requestParam@requestParam@requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter(name),它有三个常用参数:defaultValue=0,required=false,value=isApp;defaultValue表示设置默认值,required铜过boolean设置是否是必须要传入的参数,value值表示接受的传入的参数类型。@RequestParamA)常用来处理简单类型的绑定,通过Request.getParameter()获取的String可直接转换为简单类型的情况(String--简单类型的转换操作由ConversionService配置的转换器来完成);因为使用request.getParameter()方式获取参数,所以可以处理get方式中queryString的值,也可以处理post方式中bodydata的值;B)用来处理Content-Type:为application/x-编码的内容,提交方式GET、POST;C)该注解有两个属性:value、required;value用来指定要传入值的id名称,required用来指示参数是否必须绑定;77、、@ResponseBody@ResponseBody作用:该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;@RequestBody该注解常用来处理Content-Type:不是application/x-编码的内容,例如application/json,application/xml等;它是通过使用HandlerAdapter配置的HttpMessageConverters来解析postdatabody,然后绑定到相应的bean上的。因为配置有FormHttpMessageConverter,所以也可以用来处理application/x-的内容,处理完的结果放在一个MultiValueMapString,String里,这种情况在某些特殊需求下使用,详情查看FormHttpMessageConve
本文标题:SpringMVC九大常用注解
链接地址:https://www.777doc.com/doc-4970068 .html