目录

若依报错实例

前端代码 

 后端

后端代码

异常处理

​编辑 

 自定义参数验证注解


若依报错实例

报错log

00:46:48.492 [http-nio-8080-exec-32] WARN  o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - [logException,208] - Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public com.ruoyi.common.core.domain.AjaxResult com.ruoyi.web.controller.system.SysDeptController.add(com.ruoyi.common.core.domain.entity.SysDept): [Field error in object 'sysDept' on field 'deptName': rejected value [ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff]; codes [Size.sysDept.deptName,Size.deptName,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [sysDept.deptName,deptName]; arguments []; default message [deptName],30,0]; default message [部门名称长度不能超过30个字符]] ]

前端代码 

 // 表单校验
      rules: {
        parentId: [
          { required: true, message: "上级部门不能为空", trigger: "blur" }
        ],
        deptName: [
          { required: true, message: "部门名称不能为空", trigger: "blur" }
        ],
        orderNum: [
          { required: true, message: "显示排序不能为空", trigger: "blur" }
        ],

 设置rules

<div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">确 定</el-button>
        <el-button @click="cancel">取 消</el-button>
      </div>




/** 提交按钮 */
    submitForm: function() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          if (this.form.userId != undefined) {
            updateUser(this.form).then(response => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            });
          } else {
            addUser(this.form).then(response => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList();
            });
          }
        }
      });
    },

 如果rules为true,valid也为true,继续执行updata与后台通信,并通过updataDept像如下代码所示,向url为'/system/dept'发送put请求。

// 修改部门
export function updateDept(data) {
  return request({
    url: '/system/dept',
    method: 'put',
    data: data
  })
}
// 响应拦截器
service.interceptors.response.use(res => {
   .........
      return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
    } else if (code === 500) {
      Message({
        message: msg,
        type: 'error'
      })
     .......

 后端返回信息,当返回code为500时,输出错误message信息。

 后端

后端代码

@notblank注解检测部门名称是否为空

@size注解检测输入名称是否在规定长度内

当不满足如上两个条件时,后端抛出异常

 @NotBlank(message = "部门名称不能为空")
    @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
    public String getDeptName()
    {
        return deptName;
    }

  

@RequestMapping("/system/dept"):映射先把固定的部分挂在类上 

@RestController
@RequestMapping("/system/dept")
public class SysDeptController extends BaseController
{
    @Autowired
    private ISysDeptService deptService;

 @Validated:即要对参数验证起作用的注解

/**
     * 修改部门
     */
    @PreAuthorize("@ss.hasPermi('system:dept:edit')")
    @Log(title = "部门管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@Validated @RequestBody SysDept dept)
    {
        Long deptId = dept.getDeptId();
        deptService.checkDeptDataScope(deptId);
        if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
        {
            return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
        }
        else if (dept.getParentId().equals(deptId))
        {
            return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
        }
        else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0)
        {
            return AjaxResult.error("该部门包含未停用的子部门!");
        }
        dept.setUpdateBy(getUsername());
        return toAjax(deptService.updateDept(dept));
    }

异常处理

 

当 @notblank@size两个注解检测到输入名称不符合要求时,抛出异常类型MethodArgumentNotValidException ,异常被全局异常处理器捕获,返回code:500以及message 给到前端, 前端路由截获错误码500 的信息,进行处理显示message 内容。

 自定义参数验证注解

依赖

设置限定范围

最终实现 

报错log

17:57:00.102 [http-nio-8080-exec-12] WARN  o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - [logException,208] - Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public com.ruoyi.common.core.domain.AjaxResult com.ruoyi.system.controller.MyStudentController.add(com.ruoyi.system.domain.MyStudent): [Field error in object 'myStudent' on field 'name': rejected value [惊声尖笑f]; codes [Size.myStudent.name,Size.name,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [myStudent.name,name]; arguments []; default message [name],4,0]; default message [学生姓名长度不能超过4个字符]] ]

Logo

快速构建 Web 应用程序

更多推荐