1:@RestController是一个组合注解,它包含了@Controller和@ResponseBodey两个注解的功能
用@RestController标记的类表示这是一个RESTful风格的控制器,它可以处理HTTP请求并返回JSON格式的响应;@RestController注解在处理请求时,会自动将方法的返回值转换为json格式的响应体,并返回给客户端;
因此,使用@RestController可以省去在每个方法上都加@ResponseBody注解的麻烦;
@RequestMapping:在Spring MVC中,@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系,既可以修饰类,也可以修饰方法;
类定义处:用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
方法定义处:相对于类定义处的URL,
@RequestParam :如果方法形参名称与请求参数名称不一致,可以使用@RequestParam完成映射;
如果请求参数名为username,controller方法形参使用name进行接收,是不能直接封装的,需要在方法形参前面加上RequestParam,然后通过value属性执行请求参数名;
集合参数:请求参数名和形参集合对象名相同且请求参数为多个,@RequestParam 绑定参数关系,例如:
@RequestMapping("/listParam") public String listParam(@RequestParam List<String> hobby){ System.out.println(hobby); return "OK"; }
@DateTimeFormat:
对于日期类型的参数在进行封装的时候,需要通过@DateTimeFormat注解,以及其中的pattern
属性来设置日期的格式;因为日期的格式多种多样,请求pattern属性中如何指定,
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
System.out.println(updateTime);
return "OK";
}
路径参数:通过请求URL直接传递参数,使用{..}来标识该路径参数,需要使用@PathVariable获取路径参数
@RequestMapping("/path/{id}")
public String pathParam(@PathVariable Integer id){
System.out.println(id);
return "OK";
}
@RequestMapping("/path/{id}/{name}")
public String pathParam2(@PathVariable Integer id, @PathVariable String name){
System.out.println(id+ " : " +name);
return "OK";
}
类型:方法注解,类注解
位置:SpringMVC控制器方法上/类上
作用:将当前方法返回值直接返回,如果是实体/集合转换为JSON返回
@Component:
service层以及dao层的实现类,交给ioc容器管理,就是将该类声明为IOC容器中的bean;
@Component
public class UserServiceA implements UserService {
@Autowired
private UserDao userDao ;
public List<User> listUser() {
//调用 dao 层, 查询数据
List<User> userList = userDao.listUser();
//2. 对数据进行逻辑处理
for (User user : userList) {
Address address = user.getAddress();
address.setProvince(address.getProvince()+" 省/市A");
address.setCity(address.getCity()+" 区/县A");
user.setAddress(address);
}
return userList;
}
}
为controller及service注入运行时依赖的对象,在成员变量上加上注解,表示在程序运行时,Springboot会自动的从IOC容器中找到UserService类型的bean对象,然后赋值给该变量;
@RestController
public class UserController {
@Autowired
private UserService userService ;
@RequestMapping("/listUser")
public Result listUser() {
List<User> userList = userService.listUser();
return Result.success(userList);
}
}
但是需要注意:@Autowired注解,默认是按照类型进行,如果存在多个相同类型的bean,会报错
报错解决方案:
1)@Primary注解
当存在多个相同类型的Bean注入时,加上@Primary,来确定默认的实现
2) @Qualifier 注解
可以通过@Autowired ,配合@Qualifier 来指定我们当前要注入哪一个bean对象;在@Qualifier的value属性中,指定注入的bean的名称
@Resource注解
通过@Resource注解,并指定其name属性指定要注入的bean的名称;这种方式呢,是按照bean的名称进行注入的
@Autowird与@Resource的区别:
@Autowird属于sping框架,默认按照bean的类型注入;可以配合@Qualifier注解,实现按照名称注入;
@Resource是javaEE自带的注解,根据bean的名称进行注入的
&要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:
注意事项:
声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写;
目前来说,我们使用以上四个注解都可以声明bean,但是在集成后端web开发之后,声明控制器bean只能用@Controller;
@ComponentScan
1)前面声明bean的四大注解,要想生效,还需要被组件扫描注解
2)@ComponentScan注解虽然没有显式配置,但是实际上已经包含在了引导类声明注解@SpringBootApplication 中,默认扫描的范围是引导类所在包以及其子包;
提示:将我们定义的controller,service,dao这些包呢,都放在引导类所在包controller,service,dao这些包呢,这样我们定义的bean就会被自动的扫描到。