SpringMvc参数解析器,让你的方法入参更优雅

spring参数解析器,让你的方法入参更优雅

曾几何时,我们编程从原始时代进入石器时代,开始拥有使用工具的思想,于是大量的工具,util和脚手架开始像雨后春笋似的出现,spring字如其名,像春天一样,奠定了万物复苏的基石,于是基于spring的大量框架开始出现,如springMvc,springboot,springcloud等,生态一时无两。作为使用spring多年的老用户,总是会好奇我们在使用开发的各种功能,于是像猫一样的探索,挖掘,模仿让人着谜的各种设计。今天分享参数解析器,实现像@RequestBody一样的功能,一个注解自动注入想要参数的方法解析器实战。废话不多说,直接上代码!

成都创新互联公司是网站建设专家,致力于互联网品牌建设与网络营销,专业领域包括成都网站设计、网站制作、电商网站制作开发、微信小程序定制开发、微信营销、系统平台开发,与其他网站设计及系统开发公司不同,我们的整合解决方案结合了恒基网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,且不断评估并优化我们的方案,为客户提供全方位的互联网品牌整合方案!

功能背景描述:

在开发中,经常会用到在控制层的对外请求接口入参中,希望通过一个注解来注入当前登录用户信息,从而在接口功能下行过程中,能够一直传下去,来实现用户信息的获取

实现步骤如下:

定义当前登录用户类 CurrentUser:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 描述:当前登录用户

* 作者:IT学习道场

* 时间:2022-11-15 19:07
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CurrentUser {
private Long userId;
private String userName;
}

自定义注解:

import java.lang.annotation.*;
/**
* 描述:自定义用户注解

* 作者:IT学习道场

* 时间:2022-11-15 16:56
*/
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WlcUser {
}

当前用户解析器:


import com.example.demo.annotation.WlcUser;
import com.example.demo.po.CurrentUser;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
/**
* 描述:当前用户解析器

* 作者:IT学习道场

* 时间:2022-11-15 17:01
*/
public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
//方法参数是否带有 WlcUser注解,带的话就解析执行下方 resolveArgument 方法
return parameter.hasParameterAnnotation(WlcUser.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
//1 这里面可以从httpHeader中获取用户标识或者其他属性值,也可以通过springIoc中bean来执行增删改查,rpc来获取,但是要用spring的上下文来获取bean
//2 也可以从token中解析出当前登录用户信息,返回也行对象 CurrentUser
//3 也可以从你自己定义的用户上下文中获取 CurrentUser,前提你要自己写一个用户上下文
//4 这里调用sprinIoc里管理的bean的话,需要 SpringContextUtil上下文来获取bean,在调用方法
//5 这里只是自己new了一个当前用户,来直接赋予加了 WlcUser 注解修饰的对象
CurrentUser currentUser = new CurrentUser(1L,"老王");
return currentUser;
}
}

把参数解析器注入到mvc中:

import com.example.demo.resolver.CurrentUserMethodArgumentResolver;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
/**
* 描述:web拦截器,解析器配置类

* 作者:IT学习道场

* 时间:2022-11-15 19:09
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List resolvers) {
resolvers.add(new CurrentUserMethodArgumentResolver());
}
}

现在测试controller测试实现:

import com.example.demo.annotation.WlcUser;
import com.example.demo.po.CurrentUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 描述:参数解析解TestController

* 作者:IT学习道场

* 时间:2022-11-16 9:25
*/
@Slf4j
@RestController
@RequestMapping("/currentUserResolver")
public class CurrentUserResolverController {

@GetMapping("/currentUserResolve")
public void currentUserResolve(@WlcUser CurrentUser user){
log.info("参数解析器注入 CurrentUser = {}", user.toString());
}
}

请求下,控制台日志:

参数解析自动注入成功!自己动手丰衣足食,去玩玩吧!

新闻标题:SpringMvc参数解析器,让你的方法入参更优雅
文章链接:http://www.mswzjz.cn/qtweb/news43/484843.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能