探究SpringMVC中常用注解

天天在项目中用的注解,今天来研究一下它们。建议先理解SpringMVC原理篇:https://blog.csdn.net/weixin_43184769/article/details/90372793#HandlerAdapter_15。


@Controller

注解位置: 标注在Controller类上
作用: 将注解的类交给SpringIOC容器管理,并指明该实例是一个Controller。
参数:

// 指定Spring Bean Name
@Controller(value = "")

原理: 在SpringIOC容器启动初始化单例时能够根据此注解扫描到此类,初始化后会对Controller进行URL映射。(不理解可以回顾SpringMVC原理篇:https://blog.csdn.net/weixin_43184769/article/details/90372793#HandlerAdapter_15)
**验证:**如果将Controller类的注解换成@Component,启动时不会报错,但是在浏览器中输入路径时会出现404,说明Spring没有对所有的bean进行URL映射。

@RestController

注解位置: 标注在Controller类上
参数: 同@Controller
作用: 同@Controller,只是将请求返回的数据格式统一为JSON。相当于@Controller + @ResponseBody
原理: 结合@Controller和@ResponseBody理解。

@ResponseBody

注解位置: 标注在类上或者方法上
参数:
作用: 将标注的方法的返回值转换为指定格式直接返回。如果标注在Controller类上,则表示此类中所有方法返回值都会被处理。
原理: 在controller方法返回后,会通过转换器(HttpMessageConverter的合适实现类)将返回的对象转换成指定的格式(JSON、XML)放入Response Body中,并且在处理完以后不会再执行视图处理器,而是直接将数据写入输出流中。
注意: 如果返回对象,按utf-8编码。如果返回String,默认按iso8859-1编码,页面可能出现乱码。因此在注解中我们可以手动修改编码格式,例如@RequestMapping(value="/cat/query",produces=“text/html;charset=utf-8”)

@RequestBody

**注解位置:**标注在方法的形参上
参数:

// required 表示此参数是否为必须的,默认为true,如果设置为false那么在没有收到此参数时不会报错
@RequestBody(required = true)

作用: 将Request Body中的指定格式数据解析后封装到形参对象中。
原理: SpringMVC处理请求中有一个步骤是给需要调用的Controller中的指定方法的形参赋值,在这一步中会反射获取形参上是否有注解,如果有此注解则会调用转换器(HttpMessageConverter的合适实现类)解析Request Body中的数据解析后进行封装。(不理解可以回顾SpringMVC原理篇:https://blog.csdn.net/weixin_43184769/article/details/90372793#HandlerAdapter_15)
注意: 从Request体内获取参数,那么就一定是Post请求。

@RequestMapping

注解位置: 标注在类或者方法上
作用: 用于映射请求的路径与对应的方法。
参数:

	// 指定请求的地址,可以配置多个地址对应一个方法
	@AliasFor("path")
    String[] value() default {};
	//同 value
    @AliasFor("value")
    String[] path() default {};

	// 指定Http请求方法(GET、POST、PUT等),满足才处理
    RequestMethod[] method() default {};

	// 指定Request中必须包含的参数,可以由多个,可以加判断(age != 10),满足才处理
    String[] params() default {};
	
	// 指定request的header中必须包含指定值才能处理请求。
	// 例如防盗链,token等
    String[] headers() default {};

	// 指定request  提交的内容  的类型。满足才处理
	// 例如:consumes="application/json"
    String[] consumes() default {};
	// 指定返回内容的类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。
    String[] produces() default {};

原理:

  1. 在SpringIOC容器初始化完毕后对Controller与URL进行映射的阶段,获取URL有两种方式,其一就是根据注解,通过反射机制获取注解中的值然后进行处理。

  2. SpringMVC处理请求中有一个步骤是处理适配器寻找指定的处理方法,其中的寻找方式正是根据请求的URL与@RequestMapping中配置的路径进行比对,获取相应方法执行。
    (不理解可以回顾SpringMVC原理篇:https://blog.csdn.net/weixin_43184769/article/details/90372793#HandlerAdapter_15)

Spring提供了快捷使用的方式

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping

这5个注解只默认指定了请求的方法,还需配置路径,其他的参数和@RequestMapping相同。

@RequestParam

注解位置: 标注在方法的形参上
作用: 用于获取传入参数的值。
参数:

	// 参数的名称,与request中的参数同名。
    @AliasFor("name")
    String value() default "";
	// 是否为必须的参数
    boolean required() default true;
	// 设置此参数的默认值。
    String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";

原理: SpringMVC处理请求中有一个步骤是给需要调用的Controller中的指定方法的形参赋值,通过反射获得形参上的注解,如果有@RequestParam,则根据注解中的value获取指定参数进行封装。

@PathViriable

注解位置: 标注在方法的形参上
作用: 用于获取定义在路径中的参数值。
参数: value:指定参数名
使用示例:
栗子中定义了路径中的参数名为name,配合@PathViriable注解来获取参数。

	@RequestMapping("/{name}/demo.action")
    public String demo(@PathVariable(value = "name") String name){
        return "index";
    }

原理: SpringMVC处理请求中有一个步骤是给需要调用的Controller中的指定方法的形参赋值,通过反射获得形参上的注解,如果有@PathViriable注解则会根据注解去从URL中获取值。

@CookieValue

注解位置: 标注在方法的形参上
作用: 用于获取request中的cookie值作为形参数值。
参数:

@AliasFor("name")
	// 对应cookie的key
    String value() default "";
    
    boolean required() default true;

    String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";

原理: SpringMVC处理请求中有一个步骤是给需要调用的Controller中的指定方法的形参赋值,通过反射获得形参上的注解,如果有@CookieValue则会根据注解的参数value作为Key,从request带来的cookie中去获取value,作为形参的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值