首页 > 其他分享 >springBoot自定义参数注解

springBoot自定义参数注解

时间:2024-01-25 15:26:14浏览次数:28  
标签:web springBoot 自定义 import springframework public org 注解 annotation

springBoot自定义参数注解

前置条件:新建一个springboot项目

1.新建一个标记注解@Auth

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author wangfan
 */
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface Auth {
}

2.新建一个处理器继承HandlerMethodArgumentResolver

import com.example.anno.Auth;
import com.example.po.UserPO;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
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;
/**
 * @author wangfan
 */
@Component
public class UserParamResolver implements HandlerMethodArgumentResolver {
    @Override
    public boolean supportsParameter(MethodParameter methodParameter) {
        //判断方法参数是不是UserPO,判断参数是否带有Auth注解
        return methodParameter.getParameterType().isAssignableFrom(UserPO.class) && methodParameter.hasParameterAnnotation(Auth.class);
    }

    @Override
    public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
        //模拟从Redis/security/session里获取信息
        UserPO user = new UserPO();
        user.setId(1L);
        user.setName("wangfan");
        return user;
    }
}

3.将处理器添加到Mvc

package com.example.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author wangfan
 */
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter{

    @Resource
    private UserParamResolver userParamResolver;
    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        super.addArgumentResolvers(argumentResolvers);
        argumentResolvers.add(userParamResolver);
    }
}

4.写个接口测试

import com.example.anno.Auth;
import com.example.po.UserPO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @author wangfan
 */
@RestController
public class TestController {
    @GetMapping("/testAuth")
    public UserPO testAuth(@Auth UserPO user){
        return user;
    }
}

标签:web,springBoot,自定义,import,springframework,public,org,注解,annotation
From: https://www.cnblogs.com/WangJingjun/p/17987220

相关文章

  • SSAS 利用Adomd 编程实现Cube的自定义配置
    利用Adomd执行Cube数据库的配置。 需要下载:Microsoft.AnalysisServices.AdomdClient,安装,再搜索到DLL的位置,在程序里引用下载地址 环境:SqlServer2022表格模型脚本内容存放在:s01.json文件里AdomdConnectionconn=newAdomdConnection("DataSourc......
  • 解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
    跨域问题是浏览器为了保护用户的信息安全,实施了同源策略(Same-OriginPolicy),即只允许页面请求同源(相同协议、域名和端口)的资源,当JavaScript发起的请求跨越了同源策略,即请求的目标与当前页面的域名、端口、协议不一致时,浏览器会阻止请求的发送或接收。解决跨域问题方案跨域问题......
  • 注解
    @Override:用于重写方法的前面,例如只能写在fly的上面,不能写在classSon的上面,即使删掉了override,重写了还是重写了,不会受影响。 总结:1、@Override表示指定重写父类的方法(从编译层面验证),如果父类没有fly方法,则会报错2、如果不写@Override注解,而父类......
  • Springboot整合logback
    Springboot整合logback1、引入maven依赖<!--slf4j日志门面--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.26</version>&......
  • xrandr: error BadMatch (invalid parameter attributes) 无法设置自定义分辨率刷新率
    我的环境ManjaroKDENvidia显卡前言前几天在创建虚拟显示屏让iPad成为副屏时,我打算使用xrandr给虚拟显示屏自定义分辨率以及144hz的刷新率(为了与主屏幕同步)但是当进行了如下操作后发生了RT报错:❯cvt19201080144#1920x1080143.88Hz(CVT)hsync:169.35kH......
  • 6. 结构体和自定义类型
    结构体与自定义类型结构体:将相关的数据放置在一起可以通过点操作符(.)访问内部元素可以作为函数的输入参数或返回类型一个简单的代码示例://self-defineddatatype--struct#include<iostream>structPoint{intx;inty;};//PointvoidprintPoint(Poi......
  • SpringBoot开启动态定时任务并手动、自动关闭
    场景需求:在执行某个方法的两小时之后进行某个操作涉及:定时任务、哈希表需要注意:业务逻辑层是单一实例的,所以在定时任务类内操作业务逻辑层的某个属性和在业务逻辑层内操作的都是同一个。疑问:ThreadPoolTaskScheduler线程池需不需要规定线程数量?定时任务类@Componentpublicc......
  • 实现流程化办公,快看看自定义拖拽表单!
    一直以来,流程化办公是很多企业的梦想和追求,因为可以帮助企业提高办公效率,降低人工成本,高效利用企业内部数据,做好办公协作工作。自定义拖拽表单优势明显、操作简单、功能灵活、可视化设计,是理想的流程化办公助力利器。众所周知,随着办公流程管理的规范化和体系化发展,各部门之间的协......
  • js 自定义数据属性
    HTML5允许给元素指定非标准的属性,但要使用前缀data-以便告诉浏览器,这些属性既不包含与渲染有关的信息,也不包含元素的语义信息。除了前缀,自定义属性对命名是没有限制的,data-后面跟什么都可以。下面是一个例子:<divid="myDiv"data-appId="12345"data-myname="Nicholas"></div>......
  • Uniapp微信小程序:轻松实现自定义导航栏,提升用户体验
    1、引言当涉及微信小程序的界面设计时,我们常常会发现自带的导航栏功能相对简单,仅限于显示当前页面的标题。然而,在实际开发过程中,我们往往需要更多的自由度和个性化,以满足用户体验的需求。因此,自定义导航栏成为必然选择。通过自定义导航栏,我们可以赋予小程序更多的设计灵活性和交互......