Controller层常使用的注解
类位置
@Controller
@Controller定义一个Controller控制器
- 在Spring MVC 中,控制器Controller 负责
处理 由DispatcherServlet 分发的请求
- 前端调用接口请求最先到达
DispatcherServlet ,DispatcherServlet 根据请求路径的url找对应的Controller控制器类 @Controller 的作用: 此时就是把这个类定义为控制器,DispatcherServlet 分发请求到这些控制器类中,找对应URL的控制器- 没有@Controller就不是控制器,请求就不会扫描这个类,就识别不到更不用说调用了
- DispatcherServlet 把用户请求的数据经过
业务处理层 处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示
- DispatcherServlet (分发) => Controller(调用) => Service(业务处理层) => Model(返回数据) => Controller(return) => View (前端展示)
- 在Spring MVC 中提供了一个非常简便的定义Controller控制器 的方法,你无需继承特定的类或实现特定的接口
- 只需使用
@Controller 标记一个类是Controller,这样的Controller 就能被外界访问到。
仅仅使用@Controller是不能算一个完整的控制器类的,只能说一半一半
- @Controller就只是一个干干净净的注解,不会出现
/root/usr 这样的URL - 完整的控制器要配合
@RequestMapping("/root") 这样的注解才完整,才能被请求的那个URL精确找到类所在位置
@Controller
@RequestMapping("/action")
public class ActionController {}
@RequestMapping
RequestMapping 是一个用来处理请求地址映射 的注解,可用于类或方法上。 用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
- 前端请求URL,被哪一个@RequestMapping匹配上了
- 这个@RequestMapping注解对应的类就会被用来处理这个请求
RequestMapping注解有六个属性 [常用的只是value、method]
value : 指定请求的实际地址,默认一个可以不写value;
@RequestMapping("/action")
@RequestMapping(path = "/action")
@RequestMapping(value = {"/hello", "/world", "/action"})
@RequestMapping("/action/{name}")
public String hello(@PathVariable("name") String username) {
}
method : 指定请求的method类型, GET、POST、PUT、DELETE等;
@RequestMapping(value="/action", method=RequestMethod.GET)
@RequestMapping(value="/action", method=RequestMethod.POST)
consumes : 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
- 只有当请求头中
Content-Type 的值与指定可消费(设置)的类型中有相同的时候,请求才会被匹配。 - 如果某个处理方法只允许接收JSON格式的请求数据,则可以通过设置consumes属性进行限定
@RequestMapping(value = "/pets", consumes="application/json")
public void addPet(@RequestBody Pet pet) {}
produces : 它的作用是指定返回值类型,不但可以设置返回值类型还可以设定返回值的字符编码
- 仅当request请求头中的(Accept)类型中包含该指定类型才返回;
- 如果你想限定方法返回值的数据类型,则可以通过produes属性进行指定;
@RequestMapping(value="/add",produces= {
"application/json;charset=utf-8"
})
@ResponseBody
public User add(User user){
}
params : 请求路径中必须携带的参数有哪些,如果没有请求参数就会出错400。
- 只有符合URL规则且有指定参数的请求才会映射到当前的方法上
@RequestMapping(value = "/demo",params = "token=123")
public String params(){
return "params handler";
}
http://localhost:8080/demo?token=123
headers : 指定request中必须包含某些指定的header值,才能让该方法处理请求。
@RequestMapping(value = "/demo",headers={
"context-type=text/plain","context-type=text/html"
})
public String header(){
return "headers handler";
}
细分还有@PostMapping、@GetMapping,格式差不多
@PostMapping("/wordTJBB")
@RestController
@RestController=@Controller+@ResponseBody
- 一个可以被扫描到的控制器且返回值不会经过视图解析器的json数据
@Api
@Api 使用在类上,表明是swagger资源
- @API拥有两个属性:value、tags
tags –表示说明 => 用这一个就行了value –也是说明,基本用tags替代description –详细说明(已经弃用)
@Api(tags = {"标题名称"}, description = "说明")
public class WordPoiController{}
@Slf4j
@Slf4j是用作日志输出的,一般会在项目每个类的开头加入该注解
- 如果不写下面这段代码,并且想用log
- 就可以用@Slf4来代替;这样就省去这段很长的代码。
private final Logger logger = LoggerFactory.getLogger(当前类名.class);
@Slf4j
public class QueryBillController {
public String getBills() {
log.info("进入账单查询接口");
}
方法位置
@ResponseBody
@ResponseBody是作用于返回数据的时候,不是指请求开始的时候一定要json的参数 @ResponseBody的作用其实是将java对象转为json格式的数据。
- @responseBody注解的作用: 将controller的方法
返回的对象 通过适当的转换器转换为指定的格式之后,写入到response对象的body区 ,通常用来返回JSON数据或者是XML数据。 注意 :在使用此注解之后不会再走视图处理器(不会去调用打开任何一个html文件),而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。注意 :在使用@RequestMapping 后,返回值通常解析为跳转路径 (打开新的html文件),但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中(返回数据,而不是返回新的页面)。
@ResponseBody
public RModel generateFile(){}
警告: 这个是@ResponseBody ,有一个相似的叫@RequestBody才是控制请求时的参数的
@ApiOperation
swagger接口文档
- @ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”)
@ApiOperation(value = "导出统计报表")
@PostMapping("/wordTJBB")
public RModel getXZQDMByName
@GlobalTransactional
变量位置
@Autowired
@Qualifier
@Resource
参数位置
@RequestBody
@RequestBody 的作用其实是将json格式的数据转为java对象。
一个接受参数的位置只能出现一个@RequestBody ,因为一个json格式可以包含无限的数据,没必要也不可以 在参数中出现多个@RequestBody注解
public RModel getFileUrl(@RequestBody String str){
}
@RequestParam
@RequestParam :将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
注意: 请不要老想着用@RequestParam 去接受json格式的数据 想用json的数据直接用@RequestBody
@RequestParam(
value=”参数名”,required=”true/false”,defaultValue=””
)
value :参数名required :是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。defaultValue :默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值
@RequestMapping("test")
public ModelAndView test1(@RequestParam("name")String name){}
http://localhost:8080/test?name=123
@RequestParam 用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性。 - 警告: 不要拿
@RequestParam 注解去想着接受json的对象,他就是用来接受普通的参数的,想接受json可以使用@RequestBody 注解
@PathVariable
|