美文网首页
springmvc 统一入参校验

springmvc 统一入参校验

作者: sickle4j | 来源:发表于2023-05-16 09:41 被阅读0次

要实现Spring MVC中的统一请求参数校验,您可以使用自定义注解和拦截器来实现。以下是一种可能的实现方式:

  1. 创建自定义注解:首先,创建一个自定义注解,用于标记需要进行参数校验的方法或类。
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestParamValidation {
}
  1. 创建拦截器:创建一个拦截器,在方法执行之前进行参数校验。拦截器会检查被@RequestParamValidation注解标记的方法或类,并执行参数校验。
public class RequestParamValidationInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 检查被 @RequestParamValidation 注解标记的方法或类
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        Class<?> clazz = handlerMethod.getBeanType();

        if (method.isAnnotationPresent(RequestParamValidation.class) || clazz.isAnnotationPresent(RequestParamValidation.class)) {
            // 执行参数校验
            if (!validateParams(request)) {
                // 校验失败,返回错误响应
                response.setStatus(HttpStatus.BAD_REQUEST.value());
                response.setContentType(MediaType.APPLICATION_JSON_VALUE);

                // 返回错误信息
                Map<String, String> errorResponse = new HashMap<>();
                errorResponse.put("error", "Invalid request parameters");
                ObjectMapper objectMapper = new ObjectMapper();
                objectMapper.writeValue(response.getWriter(), errorResponse);

                return false;
            }
        }

        return true;
    }

    private boolean validateParams(HttpServletRequest request) {
        // 执行参数校验逻辑,根据具体需求自行实现
        // 返回 true 或 false,表示参数校验是否通过
        // 可以使用注解方式,或者手动校验参数
        return true;
    }
}

在上面的示例中,RequestParamValidationInterceptor拦截器会在方法执行之前进行拦截,检查是否有@RequestParamValidation注解,并执行参数校验逻辑。

  1. 注册拦截器:将拦截器注册到Spring MVC的配置中,以便在请求到达时执行拦截。
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Autowired
    private RequestParamValidationInterceptor requestParamValidationInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(requestParamValidationInterceptor);
    }
}

在上面的示例中,WebMvcConfig类实现了WebMvcConfigurer接口,并通过addInterceptors方法将RequestParamValidationInterceptor拦截器注册到拦截器链中。

  1. 使用自定义注解:在需要进行参数校验的方法或类上标记@RequestParamValidation注解。
@RestController
@RequestMapping("/example")
@RequestParamValidation
public class ExampleController {
    @GetMapping("/method")
    public ResponseEntity<String> exampleMethod(@RequestParam("param") String param) {
        // 处理请求
        return ResponseEntity.ok("Success");
    }
}

在上面的示例中,@RequestParamValidation注解标记了ExampleController类,表示

该类中的方法都需要进行参数校验。

现在,当请求到达ExampleControllerexampleMethod方法时,拦截器会检查参数校验并进行相应处理。如果参数校验失败,将返回适当的错误响应。

通过上述步骤,您可以实现Spring MVC中的统一请求参数校验,确保参数的合法性和一致性。您可以根据需要,扩展拦截器和校验逻辑,以满足具体的业务需求。

相关文章

网友评论

      本文标题:springmvc 统一入参校验

      本文链接:https://www.haomeiwen.com/subject/veovsdtx.html