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


Spring Boot GET和POST请求参数校验不一致如何解决?


Spring Boot GET和POST请求参数校验不一致如何解决?

spring boot 入参校验的统一格式问题

问题描述

在使用 spring boot 对不同类型的 api 接口进行入参校验时,出现了不同步的情况:

  • post 接口使用 @requestbody @valid 注解后,可以正确校验并返回错误信息,如 “校验失败:parentid:不能为null”。
  • get 接口使用 @validated 和 @requestparam 注解后,却提示 “required request parameter ‘feedid’ for method parameter type long is not present”。

解决方法

要让 get 请求的校验结果与 post 请求统一,需要将 get 请求的参数封装成一个对象,并在该对象上添加 jsr-303 注解进行校验:

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

此外,还需要定义一个全局异常处理器来处理缺少请求参数的情况:

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

相关阅读