----------------------------------------------------------------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("注释");)会回滚