SpringBoot中用到的注解

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";
}

@PathVariable

路径参数:通过请求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";
}

@ResponseBody

类型:方法注解,类注解

位置: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;
    }
}

@Autowired:

为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就会被自动的扫描到。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值