自定义注解说明,使用参数注解拿取登录用户信息

阅读: 评论:0

自定义注解说明,使用参数注解拿取登录用户信息

自定义注解说明,使用参数注解拿取登录用户信息

一、自定义一个注解

@Documented
@Target({ElementType.METHOD,ElementType.TYPE,ElementType.FIELD,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface Hello {String value() ;}

二、获取实体类里属性上的注解值

 1、定义一个实体类

@Data
@ToString
public class Student {@Hello(value = "test")private String name;private int age;}

2、拿值

@RequestMapping(value = "testAnnocationField")
public void testAnnocationField() {Class<Student> studentClass = Student.class;try {Field name = DeclaredField("name");name.setAccessible(true);if(name.isAnnotationPresent(Hello.class)){ // 是否有注解Hello annotation = Annotation(Hello.class);String value = annotation.value();System.out.println(value);}} catch (NoSuchFieldException e) {e.printStackTrace();}
}执行结果: test

三、获取方法上的注解值

@RequestMapping(value = "testAnnotation1")
@Hello(value = "test")
public void testAnnotation1() throws NoSuchMethodException {Class<PractiseController> practiseControllerClass = PractiseController.class;Method method = Method("testAnnotation1");if(method.isAnnotationPresent(Hello.class)) { // 判断方法上是否有注解Hello annotation = Annotation(Hello.class);System.out.println(annotation.value());}
}执行结果: test
备注: PractiseController 为类名

四、动态获得方法上的注解值

  1、创建yml文件

server:port: 8088
spring:profiles:active: dev

 2、获得动态值

@RequestMapping(value = "testAnnotation")
@Hello(value = "${server.port}")
public void testAnnotation() throws NoSuchMethodException {Class<PractiseController> practiseControllerClass = PractiseController.class;Method method = Method("testAnnotation");if(method.isAnnotationPresent(Hello.class)) {Hello annotation = Annotation(Hello.class);System.out.solvePlaceholders(annotation.value()));}
}执行结果: 8088

五、 参数注解,获取登录用户信息较为常用

  1、创建登录用户信息处理器,实现解析器 HandlerMethodArgumentResolver 接口

ample.zhujie.annotation.LoginUser;
ity.SysUser;
import MethodParameter;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.t.request.NativeWebRequest;
import org.hod.support.HandlerMethodArgumentResolver;
import org.hod.support.ModelAndViewContainer;@Component
public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {// 判断当前用户是否有注解参数 @LoginUser SysUser sysUser@Overridepublic boolean supportsParameter(MethodParameter parameter) {ParameterType().isAssignableFrom(SysUser.class) && parameter.hasParameterAnnotation(LoginUser.class);}@Overridepublic Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory             webDataBinderFactory) throws Exception {// 给注解参数SysUser 赋值,此处作为测试,因此写了死值,实际开发中,可将登录成功后存入session 或者redis中的用户id取出,查询当前登录用户从而赋值SysUser sysUser = new SysUser();sysUser.setId("ghjklyuiohjkhjk");sysUser.setName("testUser");return sysUser;}
}

2、创建参数注解@LoginSysUser

@Documented
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginUser {String value()  default  "";}

 3、将自定义参数解析器设置到spring的参数解析器集合中

import org.springframework.beans.factory.annotation.Autowired;
import t.annotation.Configuration;
import org.hod.support.HandlerMethodArgumentResolver;
import org.springframework.fig.annotation.WebMvcConfigurer;import java.util.List;@Configuration
public class LoginUserConfigurer implements WebMvcConfigurer {@Autowiredprivate LoginUserHandlerMethodArgumentResolver loginUserHandlerMethodArgumentResolver;@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {resolvers.add(loginUserHandlerMethodArgumentResolver);}
}

4、测试

@RequestMapping(value = "/testLoginUser")
@ResponseBody
public String getPort(@LoginUser SysUser sysUser){System.out.println(sysUser);return null;
}结果: SysUser(name=testUser, id=ghjklyuiohjkhjk)

 

本文发布于:2024-02-02 03:30:25,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170681686941088.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:注解   自定义   用户信息   参数
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23