Spring之attribute与parameter对比

拦截器有一个非常有趣的应用:计算API从调用到返回的耗时。这个时候我们通常在preHandle()方法的HttpServletRequest参数对象上调用setAttribute()方法,将其实时间存入,在afterCompletion()方法中再使用getAttribute()方法读出。大家是否考虑过一个问题:attribute与parameter都能通过get方法从HttpServletRequest对象中获取,那它们的区别在哪呢?

parameter

这类参数在web应用的开发中经常使用到,是客户端向服务端传输变量的一种方式,它只能为String类型。通常在controller层可以通过@RequestParam注解来获取参数对应的值。

在HttpServletRequest类中,只存在getParameter()方法但无set方法,表名Spring不希望用户在API请求接收之前随意篡改来自客户端的请求。

attribute

与parameter参数对应,它是服务端内部相互转发传输的一种方式,可以为Object类型。在controller层可以通过@RequestAttribute注解获取对应的值。使用这个方法同样可以从客户端传值,但在Struct2之后由于使用@RequestBody获取body更为合适,导致此功能的使用频率被大大降低。

在HttpServletRequest类中,可以看到存在getter和setter的方法操纵attribute属性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@RequestAttribute和@RequestParam都是Spring MVC框架中的注解,用于处理HTTP请求参数。它们的作用有所不同。 @RequestAttribute注解用于将请求属性(Request Attribute)的值绑定到方法参数上。请求属性是在请求的生命周期内存储的数据,可以通过ServletRequest的setAttribute方法设置。通过@RequestAttribute注解,我们可以将请求属性的值直接注入到方法参数中,方便在控制器方法中使用。 @RequestParam注解用于将请求参数(Request Parameter)的值绑定到方法参数上。请求参数是在URL中可见的键值对,也可以通过表单提交或者其他方式传递。通过@RequestParam注解,我们可以将请求参数的值直接注入到方法参数中,方便在控制器方法中使用。 示例代码如下: @Controller @RequestMapping("/user") public class UserController { @GetMapping("/info") public String userInfo(@RequestParam("user_id") int userId) { //处理业务逻辑 return "user_info"; } } 在上述代码中,@RequestParam注解获取了前端页面提交的参数名为user_id的值,并赋值给方法参数userId。这样我们就可以在方法体内根据参数值进行相应的业务逻辑处理。 总结来说,@RequestAttribute注解用于获取请求属性的值,而@RequestParam注解用于获取请求参数的值。它们都能方便地将请求的数据注入到方法参数中,从而简化了参数的获取和处理过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [@RequestParam、@RequestBody、@RequestAttribute、@RequestPart和@PathVariable详解和具体示例](https://blog.csdn.net/qq_63029994/article/details/130401888)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值