代码地址:https://gitee.com/lemon_tea_is_a_little_sour/demo-validator.git

 

呈现的效果

 

导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

实体类

package com.example.demovalidator.entity;

import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import javax.validation.constraints.PastOrPresent;
import java.time.LocalDateTime;

/**
 * @author lxw
 * @date 2021/8/9
 * @apiNote
 */
@Data
public class Student {

    /**
     * id
     */
    @Null(message = "主键不可有值")
    private Integer id;
    /**
     * 姓名
     */
    @NotBlank(message = "姓名不能为空")
    private String name;
    /**
     * 性别
     */
    @NotBlank(message = "性别不能为空")
    private String sex;
    /**
     * 创建时间
     */
    @NotNull(message = "时间不能为空")
    @PastOrPresent(message = "时间格式不对")
    private LocalDateTime createTime;
}

返回类型的枚举类

package com.example.demovalidator.enums;


/**
 * @author lxw
 * @date 2021/8/9
 * @apiNote
 */
public enum ErrorCode {

    PARAM_ERROR("100","参数不正确");

    private String code;
    private String msg;

    ErrorCode(String code,String msg){
        this.code = code;
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

封装的返回

package com.example.demovalidator.Vo;

import com.example.demovalidator.enums.ErrorCode;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;

/**
 * @author lxw
 * @date 2021/8/9
 * @apiNote
 */
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResultVo {
    /**
     * 后端是否处理成功
     */
    private boolean success;
    /**
     * 错误码
     */
    private String code;
    /**
     * 错误消息
     */
    private String msg;
    /**
     * 给前端返回的值
     */
    private Object data;

    public static ResultVo success(){
        ResultVo resultVo = new ResultVo();
        resultVo.setSuccess(true);
        return resultVo;
    }

    public static ResultVo success(Object data){
        ResultVo resultVo = new ResultVo();
        resultVo.setSuccess(true);
        resultVo.setData(data);
        return resultVo;
    }

    public static ResultVo fail(ErrorCode errorCode,Object data){
        ResultVo resultVo = new ResultVo();
        resultVo.setSuccess(false);
        resultVo.setCode(errorCode.getCode());
        resultVo.setMsg(errorCode.getMsg());
        resultVo.setData(data);
        return resultVo;
    }

    public static ResultVo fail(ErrorCode errorCode){
        ResultVo resultVo = new ResultVo();
        resultVo.setSuccess(false);
        resultVo.setCode(errorCode.getCode());
        resultVo.setMsg(errorCode.getMsg());
        return resultVo;
    }
}

全局的异常处理

package com.example.demovalidator.web;

import com.example.demovalidator.Vo.ResultVo;
import com.example.demovalidator.enums.ErrorCode;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author lxw
 * @date 2021/8/9
 * @apiNote
 */
@ControllerAdvice
@ResponseBody
public class CtrIAdvice {

    @ExceptionHandler
    public ResultVo exceptionHandler(MethodArgumentNotValidException e){
        Map<String, String> collect = e.getBindingResult().getFieldErrors().stream()
                .collect(Collectors.toMap(FieldError::getField, FieldError::getDefaultMessage));
        return ResultVo.fail(ErrorCode.PARAM_ERROR,collect);
    }
}

controller类

package com.example.demovalidator.api;

import com.example.demovalidator.Vo.ResultVo;
import com.example.demovalidator.entity.Student;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;


/**
 * @author lxw
 * @date 2021/8/9
 * @apiNote
 */
@RestController
@RequestMapping("/demo")
@Validated //对本类中的方法进行校验
public class StudentController {

    @PostMapping
    public ResultVo add(@RequestBody @Valid/*校验后面的参数*/ Student student){
        return ResultVo.success();
    }
}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐