SpringMVC 主要注解 @Controller,@Service,@repository,@Component

1、@Controller  使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。

2、@Service 用来标注业务层组件

3、@Repository 用于标注访问数据库层的组件

4、@Component 不好归类,把不同组件

5、@RequestMapping 

 (1)params属性 

@RequestMapping (value= "testParams" , params={ "param1=value1" , "param2" , "!param3" })       
public String testParams() {      
     return "testParams" ;      
}

   
用@RequestMapping 的params 属性指定了三个参数,这些参数都是针对请求参数而言的,它们分别表示参数param1 的值必须等于value1 ,参数param2 必须存             在,值无所谓,参数param3 必须不存在,只有当请求/testParams.do 并且满足指定的三个参数条件的时候才能访问到该方法

(2)method属性     

@RequestMapping (value= "testMethod" , method={RequestMethod. GET ,RequestMethod. DELETE })       
public String testMethod() {      
     return "method" ;    
 } 

   

在上面的代码中就使用method 参数限制了以GET 或DELETE 方法请求/testMethod 的时候才能访问到该Controller 的testMethod 方法。

(3)headers属性   

@RequestMapping (value= "testHeaders" , headers={ "host=localhost" , "Accept" })  
public String testHeaders() {      
     return "headers" ;    
}   

headers 属性的用法和功能与params 属性相似。在上面的代码中当请求/testHeaders.do 的时候只有当请求头包含Accept 信息,且请求的host 为localhost 的时候才能     正确的访问到testHeaders 方法。   RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

 

<code class="language-html">@RequestMapping(value = "/aaa")//类级别,可以没有  
public class myController {  
    @RequestMapping(value = "/bbb")//方法级别,必须有  
    public String getMyName() {  
        return "myReturn";  
    }  
}</code>  

 

6、@RestController

@RestController = @Controller + @ResponseBody。
1)如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
例如:本来应该到success.jsp页面的,则其显示success.
2)如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
3)如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
可以直接使用@Controller,如果需要返回json可以直接在方法中添加@ResponseBody

 

用@RestController是会把返回值默认为json字符串返回给浏览器,要想返回jsp界面,如下

public ModelAndView login(){
    ModelAndView mv = new ModelAndView("index");
    return mv;
}

7、@PathVariable获取请求路径变量

 

@RequestMapping(value = "person/profile/{id}/{name}/{status}")
@ResponseBody
public Person porfile(@PathVariable int id,@PathVariable String name,@PathVariable boolean status) {
    return new Person(id, name, status);
}


8、@RequestParam

 

  @RequestParam是传递参数的.
  @RequestParam用于将请求参数区数据映射到功能处理方法的参数上。


  在url中输入:localhost:8080/**/?userName=zhangsan
  请求中包含username参数(如/requestparam1?userName=zhang),则自动传入。
  
 

public String queryUserName(@RequestParam String userName)
public String queryUserName(@RequestParam(value="userName" ,required =false ) String userName)


  
  可以通过required=false或者true来要求@RequestParam配置的前端参数是否一定要传 
  // required=false表示不传的话,会给参数赋值为null,required=true就是必须要有  
  

9、@Transactional

         @Transactional(propagation=Propagation.REQUIRED)
         如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)
         @Transactional(propagation=Propagation.NOT_SUPPORTED) 
         容器不为这个方法开启事务
         @Transactional(propagation=Propagation.REQUIRES_NEW) 
         不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
         @Transactional(propagation=Propagation.MANDATORY) 
         必须在一个已有的事务中执行,否则抛出异常
         @Transactional(propagation=Propagation.NEVER)
         必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
         @Transactional(propagation=Propagation.SUPPORTS) 
         如果其他bean调用这个方法,在其他bean中声明事务,那就用事务。如果其他bean没有声明事务,那就不用事务
         @Transactional(rollbackFor=Exception.class) //指定回滚,遇到异常Exception时回滚
         @Transactional(noRollbackFor=Exception.class)//指定不回滚,遇到运行期异常(throw new RuntimeException("注释");)会回滚

猜你喜欢

转载自blog.csdn.net/kevin_loving/article/details/81128865