Hello! 欢迎来到小浪资源网!


Spring Boot GET和POST请求参数校验如何统一处理?


Spring Boot GET和POST请求参数校验如何统一处理?

spring boot 入参校验中的疑问

spring boot 中,对于不同类型的请求,入参校验的方式可能会有所差异。本文将针对 get 和 post 请求的入参校验进行探讨。

get 请求入参校验

对于 get 接口,我们可以使用 @valid 注解在控制器类上,该注解表示该类中的所有请求参数都需要进行校验。然而,直接在请求参数上使用 jsr-303 注解(如 @notnull)会导致校验失败,并抛出 missingservletrequestparameterexception 异常。

解决方案

为了统一 get 和 post 请求的校验结果格式,我们可以将 get 请求的参数封装成一个对象,并在该对象上添加 jsr-303 注解进行校验。例如:

@getmapping("/api") public string apiget(@valid apigetrequest request) {     // ... }  public class apigetrequest {     @notNULL     private long feedid;      // getters and setters }

异常处理

为了处理 missingservletrequestparameterexception 异常,我们需要自定义一个全局异常处理器

@ControllerAdvice public class GlobalExceptionHandler {      @ExceptionHandler(MissingServletRequestParameterException.class)     @ResponseBody     public String handleMissingParams(MissingServletRequestParameterException ex) {         String name = ex.getParameterName();         // 格式化返回的错误信息         return "校验失败:" + name + ":不能为null";     } }

通过上述方式,可以实现对 get 和 post 请求入参的统一校验,并将校验失败的结果格式化为 “校验失败:xxx:不能为null”。

相关阅读