开发者学堂课程【SpringBoot 实战教程: SpringBootApplication 注解和 RestController 注解】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/651/detail/10780
SpringBootApplication 注解和 RestController 注解
内容介绍:
一、定义
二、案例
一、定义
Controller 是实现具体功能的,但是把启动方法写在 controller 里面,虽然不影响正常的运行,但是看起来不合理,所以应该把启动方法放在单独的类中,这个类就称为这个项目的启动类。
二、案例
1、建立一个启动类,放在别的包里面,命名为 springapplications。
2、把启动方法拷贝到启动类中,需要注意启动类叫 springapplications,要将之前的名字进行替换,必须是启动方法所在类的类名的解码,既然它作为启动类,启动时需要做自动配置,写入注解@EnableAutoConfiguration
@EnableAutoConfiguration
public class SpringApplications
{
public static void main (String[] args)
{
SpringApplication. run (SpringApplications.class, args) ;
}
}
3、现在的 controller 跟 springmac 的 controller 一样,虽然效果一样,但是这样效果更清晰,比如一个工程都单独建立一个含有启动方法的启动类,启动 controller 是否可以正常访问?没有报错,输入localhost
:8080/
hello
,出现404页面,找不到。
4、springcontroller 没有实例化,找不到 controller,启动类和 controller 在不同的包下面,所以启动类不知道 controller,需要用注解 componentscan 进行扫描,需要把 controller 包告诉启动类,这样 springboot 在自动配置时会扫描到 controller,同时对它进行实例化。
@EnableAutoConfiguration
@ComponentScan ("com. qianfeng. controller")
5、重新启动,访问页面回车,这次就可以正常访问。
6、把启动方法单独出来,需要注意,用 componentscan 注解指名 controller 所在的包。
7、到现在为止,在启动类上使用了两个注解,一个是 EnableAutoConfiguration,一个是 ComponentScan,还有一个注解是组合注解, 可以替代它们两个,这个注解是 springbootapplication,被称为组合注解,可以把两个注解注释掉。这个功能是等价的,它也需要告诉 controller 所在的包,这个属性叫 scanbasepackages,可以指名多个值,它是增删数组类型。
/ / @EnableAutoConfiguration
/
/ @ComponentScan ("com. qianfeng. controller")
/ /默认情况下扫描的是当前包及当前包的子包
@SpringBootApplication (scanBasePackages=
{
"com. qianfeng. controller"
}
)
但是 controller 并没在当前包,当前包是 com.qianfeng.app,controller 在 com.qianfeng.controller 包下,controller 包并不是 com.qianfeng.app 的子包,所以没有扫描到,如果 controller 在 com.qianfeng.app 的子包下,那么就不用指定包名。
8、重新启动,正常访问。实现了启动类和 controller 的分离。
9、controller 经常会使用的注解是@ResponseBody
。
/ /返回的是 Restful 内容,不使用该注解会进行跳转
10、如果在 controller 里面再写两个功能,这两个功能都是希望返回的是ResponseBody 内容,并不希望进行跳转,这时可以把 @
controller
改成 @
restcontroller
,好处是不需要在每个方法前面加 ResponseBody 注解,它的效果和使用@ResponseBody
效果是一样的。但是相比较下简单一些。
@RestController
/ / 如果每个功能返回的都是 Restful 内容,那么可以使用该注解
public class SpringController
{
@RequestMapping ("/hello")
/ /返回的是 Restful 内容,不使用该注解会进行跳转
/ /@ResponseBody
public String yes ()
{
Return
"hello" ;
}
@RequestMapping("/ok")
/
/ @ResponseBody
public String ok ()
{
Return
"ok" ;
}
11、重新启动,访问,把 host 改成 ok。可以看到 ok。
12、springboot 支持 rest 风格,返回一个值,它不会进行跳转,因为统一用的是@
RestController
。这个跟使用 springmac 是一样的。{msg}
接收到的值赋给 msg,同样要使用注解 pathvariable,注解的作用是把{msg}
接收到的值赋给 msg。
/ / 支持 Rest 风格
@RequestMapping("/ info"
/{msg}”
)
public String show (
@
pathvariable
String
msg
)
{
return" show"+
msg
;
}
13、重新启动,输入localhost
:8080/
info
/
smile
。显示 showsmile。
14、一个组合注解 @
springbootapplication
,一个是不用在每个上面都加 responsebody 注解的 restcontroller 注解,springboot 同样支持 rest 风格。