首页 > 其他分享 >通过实现 HandlerMethodArgumentResolver 校验 Controller 参数

通过实现 HandlerMethodArgumentResolver 校验 Controller 参数

时间:2025-01-10 20:23:54浏览次数:1  
标签:web HandlerMethodArgumentResolver 校验 springframework Controller import org annot

HandlerMethodArgumentResolver接口是 Spring MVC 中的一个接口,用于解析控制器方法的参数。

下面演示如何自定义一个@NotBlank注解,并实现相应的HandlerMethodArgumentResolver,来校验前端传递的参数是否为空。实际项目中已经有现成的注解可用了,这里仅用来演示HandlerMethodArgumentResolver的使用。

1. 创建自定义注解@NotBlank

首先,定义一个自定义注解@NotBlank,用于标记需要验证的方法参数。

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

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface NotBlank {
    String message() default "不能为空!";
}

2. 创建HandlerMethodArgumentResolver

然后创建一个实现HandlerMethodArgumentResolver的类,该类将进行参数验证。

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;

public class NotBlankArgumentResolver implements HandlerMethodArgumentResolver {

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.hasParameterAnnotation(NotBlank.class);
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
                                  NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        String value = webRequest.getParameter(parameter.getParameterName());

        // 参数验证
        if (value == null || value.trim().isEmpty()) {
            String message = parameter.getParameterAnnotation(NotBlank.class).message();
            throw new IllegalArgumentException(message);
        }

        return value; // 返回原始值,或根据需要转换
    }
}

3. 注册解析器

在 Spring 配置中注册自定义的HandlerMethodArgumentResolver

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;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        resolvers.add(new NotBlankArgumentResolver());
    }
}

4. 使用自定义参数解析器的控制器

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestParam;

@RestController
public class ExampleController {

    @GetMapping("/example")
    public String example(@RequestParam(value = "input", required = false) @NotBlank String input) {
        return "已校验数据:" + input;
    }
}

标签:web,HandlerMethodArgumentResolver,校验,springframework,Controller,import,org,annot
From: https://www.cnblogs.com/Higurashi-kagome/p/18664638

相关文章

  • CRC校验:原理、计算方法、优缺点及MATLAB代码示例
    引言        在数字通信和数据存储领域,数据的完整性和可靠性是至关重要的。为了确保数据在传输或存储过程中不发生错误,人们开发了许多错误检测与校正技术。其中,循环冗余校验(CyclicRedundancyCheck,简称CRC)是一种广泛应用的错误检测机制。本文将详细介绍CRC校验的基本......
  • avue 长表单校验自动定位到错误位置
    前言在使用avue时有时候需要用到很长的表单,长表单保存提交且有校验错误时,如果错误位置不在滚动屏幕可视区域,此时用户看不到任何提示信息,用户需要去滚动寻找哪一项校验不通过,用户体验很不好,需要自动定位到错误位置。解决办法avue官方文档中,avue-form和avue-crud的错误回调......
  • MES物料上料扫码校验接口
    接口需求概要 1.接口名称:MES物料上料扫码校验接口 2.传输方向:设备上位机->设备数据采集平台 3.传入参数:设备编号、工序编号、物料条码、操作员工号、上料时间 4.传输数据格式是Json 5.调用时机:在扫描物料条码后,校验该物料是否符合上料物料要求时,调用该接口 ......
  • Spring 中的 @RestController 注解详解
    @RestController 是SpringMVC中常用的注解,通常用于构建 RESTfulWeb服务。它是 @Controller 和 @ResponseBody 的组合,简化了开发RESTful接口的流程。本文将详细介绍 @RestController 的使用场景、原理以及具体案例。1. @RestController 的作用@RestControl......
  • 校验输入框内的数大于0的正整数
    <a-modaltitle="帖子推荐":maskClosable="false":visible="showModal"@ok="handleOk"@cancel="handleCancel":confirmLoading="confirmLoading">rules:{sort:[{required:true,message:&#......
  • Aviatrix Controller存在命令注入漏洞(CVE-2024-50603)
    免责声明:本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在使用本......
  • std::fstream 封装加校验
    选自Cartographer_ROSproto_stream_interface.h//Awriterforwritingprotomessagestoapbstream.classProtoStreamWriterInterface{public:virtual~ProtoStreamWriterInterface(){}//Serializes,compressedandwritesthe'proto'tothef......
  • builder.Services.AddControllersWithViews
    在ASP.NETCore中,builder.Services.AddControllersWithViews是一个用于配置应用程序以支持MVC(Model-View-Controller)模式的扩展方法。它通常在应用程序的启动配置文件中使用,例如Program.cs或Startup.cs。这个方法的作用是注册MVC控制器和视图所需的依赖项和服务。在ASP......
  • 开发随笔:身份证校验码
    身份证校验码的计算方法如下:将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7910584216379105842将这17位数字和对应的系数各自相乘的结果相加;用加出来的和除以11,看余数是多少;余数只可能是012345678910这11个数字中......
  • 深入比较 Nginx、Ingress 和 Nginx Ingress Controller
    个人名片......