首页 > 其他分享 >springboot 请求前自动给 参数的某个属性赋值

springboot 请求前自动给 参数的某个属性赋值

时间:2024-05-21 14:56:19浏览次数:33  
标签:springboot class AutoFill 自动 赋值 parameter public 属性


  springboot 请求前自动给 参数的某个属性赋值

在Spring Boot中,可以通过自定义HandlerMethodArgumentResolver来在请求处理方法前自动给参数的某个属性赋值。以下是一个简单的例子:

  1. 创建一个自定义注解来标记需要自动赋值的参数:

    @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface AutoFill { String value(); }
  1. 实现HandlerMethodArgumentResolver来处理带有@AutoFill注解的参数:

    @Component public class AutoFillHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {   @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.hasParameterAnnotation(AutoFill.class); }   @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { AutoFill autoFill = parameter.getParameterAnnotation(AutoFill.class); String fieldName = autoFill.value();   // 获取原始对象,并给对应字段赋值 Object bean = BeanUtils.instantiateClass(parameter.getParameterType()); BeanWrapper beanWrapper = new BeanWrapperImpl(bean); beanWrapper.setPropertyValue(fieldName, "自动赋值的值");   return bean; } }
  1. 在Spring Boot配置中注册自定义的HandlerMethodArgumentResolver

    @Configuration public class WebConfig implements WebMvcConfigurer {   @Autowired private AutoFillHandlerMethodArgumentResolver autoFillHandlerMethodArgumentResolver;   @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) { resolvers.add(autoFillHandlerMethodArgumentResolver); } }
  1. 使用自定义注解:

    public class MyModel { @AutoFill("myField") private String myField;   // getters and setters }   @RestController public class MyController {   @GetMapping("/test") public ResponseEntity<MyModel> test(@Valid MyModel model) { return ResponseEntity.ok(model); } }

在上述例子中,当/test路径被请求时,MyModel中标记有@AutoFill注解的myField属性将自动被赋值为"自动赋值的值"。这个例子展示了如何在Spring Boot中实现请求处理方法前的参数自动赋值。

标签:springboot,class,AutoFill,自动,赋值,parameter,public,属性
From: https://www.cnblogs.com/zhoading/p/18204063

相关文章

  • springboot使controller异步调用
    调用controller方法,遇到操作时间很长的情况下,不希望前端一直等待操作,而希望前端立马接收到操作启动的反馈,而真正的操作在后端执行,需要用到异步调用的方法。实现步骤如下:一、配置异步支持:首先,在应用程序的主类上添加@EnableAsync注解,以启用异步支持importorg.springfram......
  • 基于Springboot的rabbitTemplate的Publisher和Consumer初始化
    Publisher初始化的bean(声明new 的queue或者exchange)不会连接broker(Rabbit),在开始rabbitTemplate.convertAndSend时才会连接。消息发布到没有声明的exchange会报错,声明exchange和queue,Rabbit会创建,如果没有的话。如果exchange没有绑定queue,消息(默认false)会被抛弃。如果exc......
  • WPF使用静态属性制作按钮样式
    <Window.Resources><!--定义样式--><Stylex:Key="CustomButtonStyle"TargetType="Button"><SetterProperty="Tag"Value="{x:Staticlocal:ButtonColorSets.Button1Colors}"/>......
  • springboot2 - validation
    业务需求:客户端提交的表单,后台需要有统一的校验拦截机制。Maven依赖除了hibernate-validator,springboot本身自带这些依赖。<dependencys><dependency><groupId>jakarta.validation</groupId><artifactId>jakarta.validation-api</artifactId>......
  • springboot2 - lettuce
    spring操作redis,默认使用的是lettuce,介绍一下相关代码。Maven依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency>......
  • springboot2 - ehcache
    介绍ehcache一下在spring环境下的应用。如果是单机系统,ehcache一般是首选方案,想通过切换redis提高性能,意义不大,反而会增加部署和维护负担。工具函数如果想在spring环境下,封装自己的工具函数,下面这些基础代码估计会用到。场景:像是Excel导入数据,需要大批量更新缓存时......
  • idea中的springboot项目如何重命名而不报错
    在IntelliJIDEA中重命名SpringBoot项目需要一些步骤,以确保项目在重命名后不会报错。以下是详细的步骤指南:1.重命名项目文件夹关闭项目:在IntelliJIDEA中关闭当前项目。重命名文件夹:在文件系统中找到项目所在的文件夹,右键重命名文件夹。重新打开项目:在IntelliJID......
  • springboot的服务不需要连接数据库,如何保证正常启动
    记个小笔记@SpringBootApplication(exclude=DataSourceAutoConfiguration.class)是一个SpringBoot应用程序中用来排除特定自动配置类的注解,一般情况不需要使用数据库,取消这个自动配置即可;如果你这样做了,发现还是出现FailedtoconfigureaDataSource:'url'attributeisn......
  • Springboot Data Jdbc实体类json格式存储
    日常需求中有些需求需要在某字段存储json格式数据,例如日志审计接口传参数据等1.首先我们得保证数据库字段为text或者json2.设置读转换和写转换器importcom.fasterxml.jackson.databind.ObjectMapper;importorg.springframework.core.convert.converter.Converter;importo......
  • 在数据结构上,后端要求前端在一个对象中添加一个类型字段,并且对该对象的某些属性中都加
    这个需求的合理性取决于具体的应用场景和目的。让我们分析一下:合理性的一面:简化逻辑处理:如果这个类型字段是为了在后端快速区分或过滤不同类型的对象属性,那么在前端就做好标记,可以简化后端处理逻辑,减少在后端进行类型判断的需要。一致性保证:在前端加入类型字段并确保它与对象......