要实现Spring MVC中的统一请求参数校验,您可以使用自定义注解和拦截器来实现。以下是一种可能的实现方式:
- 创建自定义注解:首先,创建一个自定义注解,用于标记需要进行参数校验的方法或类。
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestParamValidation {
}
- 创建拦截器:创建一个拦截器,在方法执行之前进行参数校验。拦截器会检查被
@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
注解,并执行参数校验逻辑。
- 注册拦截器:将拦截器注册到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
拦截器注册到拦截器链中。
- 使用自定义注解:在需要进行参数校验的方法或类上标记
@RequestParamValidation
注解。
@RestController
@RequestMapping("/example")
@RequestParamValidation
public class ExampleController {
@GetMapping("/method")
public ResponseEntity<String> exampleMethod(@RequestParam("param") String param) {
// 处理请求
return ResponseEntity.ok("Success");
}
}
在上面的示例中,@RequestParamValidation
注解标记了ExampleController
类,表示
该类中的方法都需要进行参数校验。
现在,当请求到达ExampleController
的exampleMethod
方法时,拦截器会检查参数校验并进行相应处理。如果参数校验失败,将返回适当的错误响应。
通过上述步骤,您可以实现Spring MVC中的统一请求参数校验,确保参数的合法性和一致性。您可以根据需要,扩展拦截器和校验逻辑,以满足具体的业务需求。