SpringMvc注解 -@Controller、@Service、@Repository 等

本文详细介绍了SpringMvc框架中的核心注解,包括@Controller、@Service、@Repository、@Component、@RequestMapping、@RestController等,并解释了它们的功能及用法。通过具体的例子展示了如何使用这些注解进行请求映射、参数绑定、事务管理等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

----------------------------------------------------------------SpringMvc注解--------------------------------------------------

 

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是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

 

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

 

 

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),则自动传入。
  
  1、public String queryUserName(@RequestParam String userName)
  2、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("注释");)会回滚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值