SpringMVC开发常用注解

使用SpringMVC进行开发可以有多种使用方式但是在项目中我们经常使用的是注解形式的开发.

1、用于声明的注解@Controller

            @Controller不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。单单使用@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。有了这些注解还是不够的,我们需要告诉我们的程序应该要去哪里找我们的Controller,这也就是告诉他要扫描我们的那些包:

<!--方式一-->
<bean class="com.host.app.web.controller.MyController"/>
<!--方式二-->
< context:component-scan base-package = "com.host.app.web" />//路径写到controller的上一层(扫描包详解见下面浅析)

在Spring的开发中@Service、@Repository分别用来告诉Spring框架他们所标记的类是用作service层dao层的,他们都是@Component的一个特列,可以使得注解的还以更加清晰。与@Controller注解相关的一个注解是@ResController这个注解是一个混合注解相当于是@Controller+@ResponseBody注解,使用了他的class可以看做这个class下面所有的方法都标记了@ResponseBody注解,这样的话写入的数据会直接进入响应视图。

2、用于匹配请求路径与具体处理方法的@RequestMapping

如同@Component注解中有更详细的注解@Controller、@Service、@Repository一样,@RequestMapping注解也有相关的便捷类型的其他注解:@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping。

(1)@RequestMapping注解可以用来匹配所有类型的请求,所以他会在class的级别上还是会使用他的

(2)、使用不同的匹配规则可是匹配不同的请求路径,同时我们还可以利用@PathVariable的注解实现ResultFul 的编程风格。如果我们使用@PathVariable匹配过来的数据不是String类型的话Spring的框架会给我们完成自动的类型转换。

(3)、有关请求路径Spring框架还支持使用占位符加配置文件实现的动态路径配置

3、用于数据接收的注解@RequestBody、@RequestParam

        @RequestBody注解主要是用来接收请求体中的数据在我们常见的post、get请求类型中只有post类型的请求才有请求体所以get请求类型的时候是不能够使用@RequestBody的,在一个请求中我们可以同时使用这两个注解但是@RequestBody注解只可以使用一个而@RequestParam注解却可以使用多个。在使用@RequestBody注解的时候应该注意的是Json形式的数据与Class实体中间的一个匹配问题,@RequestParam注解主要接受的是请求路径中键值对形式的参数。这样键值对形式的参数我们也可以用来处理复杂的数据类型例如:集合、数组等

 @RequestMapping("/hello1")
    public String hello1(@RequestBody User user, @RequestParam(required = false) List<String> arrays){
        String arrysMesg ="";
        for (String item:arrays){
            arrysMesg = arrysMesg+item;
        }
        return user.toString()+arrysMesg;
    }

如果方法的参数上使用了@RequestParma注解那么这个参数就就是必须要传的,如果路径中没有这个参数,请求就会报错。不过这个性质我们也可以通过required = false的属性类注释关闭掉,这时候就变成了参数中如果有的话就自动匹配如果参数中没有的话请求的路径也不会报错。

有关前端请求的Json以及后端用实体接受情况的匹配:

在使用@RequestBody来进行数据接收的时候可以通过与Json管的注解实现Json数据与Class实体类型数据的一个智能匹配,@JsonAlias注解可以给一个属性起多个类型的别名,@JsonProperty属性则是可以摆脱对seter、getter函数的依赖。如果要是忽略这两个注解的情况下,SpringMVC默认是对大小写敏感的,在实际的项目操作过程中发现如果Json数据中key的首个字母是不能够使用大写的,这是因为还存在驼峰命名的匹配问题。当我们的Json数据中有多个相同的key时,根据SpringMVC转换的机理,后面的是会覆盖前面的。

public class User {

    @JsonAlias({"id","userid"})
    private int userId;
    private String userName;
    private String userAddress;
}

public class Users {

    @JsonProperty("id")
    private int userId;
    @JsonProperty("name")
    private String userName;

    @Override
    public String toString() {
        return "Users{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                '}';
    }
}

4、Handler Methods会用到的其他的注解

 

 

5、@Controller注解的增强——全局异常处理数据绑定及初始化

@Controller注解是告诉框架我们这个Class是用来控制器的一个Bean,他的作用也仅限于此。而@ControllerAdvice注解就是在@Controller的基础上对这个类进行一个加强,从常理来说我们也可以知道这个加强加强的一定是最常用到的一些功能——全局异常处理(@ExceptionHandler)、全局数据绑定(@ModelAttribute)、全局数据预处理(@InitBinder)。上面提到的这三种包含的增强类型注解,在使用的时候也可以直接可和@Controller注解搭配使用。@ControllerAdvice注解与@ResponseBody直接结合就是混合注解@ResControllerAdvice注解。

亲手测试了这个功能真的是感觉,这个功能蛮强大,感触最深的就是里面关于异常的全局处理以及@ModelAttribute 的全局返回数据,现在对于数据的初始化的感触并不是很大,但是从框架中初始化相关参数中携带的方法来看其应该是有很强的功能,但是目前的工作中还没有见到详细的应用场景,所以这里就也不做过多探讨。

 

 

 

  • 5
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值