您好,欢迎来到钮旅网。
搜索
您的当前位置:首页java SpringBoot统一参数校验,属性注解方式,流程示例,可直接使用

java SpringBoot统一参数校验,属性注解方式,流程示例,可直接使用

来源:钮旅网

一、注解使用方式

在属性上面添加下列注解验证参数:


import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.*;

/**
 * @author zxl
 */

@Data
@ApiModel(value = "创建用户请求对象")
public class CreateSysUserTestRequestVO {

    @NotBlank(message = "用户名不能为空字符串")
    @ApiModelProperty(value = "用户名")
    private String username;

    @NotBlank(message = "密码不能为空字符串")
    @ApiModelProperty(value = "用户密码")
    private String password;

    @NotBlank(message = "真实姓名不能为空字符串")
    @ApiModelProperty(value = "真实名称(蜂农姓名)")
    private String realName;

    @NotNull(message = "性别不能为空")
    @Min(value = 0, message = "不能小于0")
    @Max(value = 1, message = "不能大于1")
    @ApiModelProperty(value = "性别(1.男 0.女)")
    private Integer sex;

    @NotBlank(message = "手机号码不能为空字符串")
    @Pattern(regexp = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$",
        message = "用户手机号不合法")
    @ApiModelProperty(value = "手机号码(唯一)")
    private String phone;

    @NotBlank(message = "真邮箱不能为空字符串")
    @ApiModelProperty(value = "邮箱(唯一)")
    private String email;

}

二、全局异常处理


import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.validation.ObjectError;
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 javax.servlet.http.HttpServletResponse;

/**
 * 全局异常处理
 * 
 * @author zxl
 * @date 2021/04/20 11:
 **/
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 统一处理参数校验错误异常 请求参数验证失败后返回参数组装
     *
     * @param response
     * @param e
     * @return
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public ResponseVO<?> processValidException(HttpServletResponse response, MethodArgumentNotValidException e) {

        response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
        // 1、获取所有参数效验集合;2、获取所有异常信息;3、获取第一条异常信息;4、获取异常信息描述
        ObjectError objectError = e.getBindingResult().getAllErrors().get(0);
        String errorMessage = objectError.getDefaultMessage();
        String objectName = objectError.getObjectName();
        // 设置响应编码集
        response.setContentType("application/json;charset=UTF-8");
        // 记录错误信息
        log.error(objectName + "_" + errorMessage);
        // 返回组装响应对象
        return ResponseVO.create(500, errorMessage);
    }
}

三、统一响应对象(根据自己需要自行书写)


import java.io.Serializable;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;

/**
 * @param <T>
 * @author zxl
 */

@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResponseVO<T> implements Serializable {

    private static final long serialVersionUID = -82374145256685304L;

    private Integer status;

    private String message;

    private T data;

    public ResponseVO() {

    }

    ResponseVO(int code, String desc, T data) {
        this.status = code;
        this.message = desc;
        this.data = data;
    }

    ResponseVO(int code, String desc) {
        this.status = code;
        this.message = desc;
    }

    public int getStatus() {
        return status;
    }

    public String getMessage() {
        return message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    @JsonIgnore
    public boolean isSuccess() {
        return this.status == 200;
    }

    public static <T> ResponseVO<T> create(int code, String desc, T data) {
        return new ResponseVO<T>(code, desc, data);
    }

    public static <T> ResponseVO<T> create(int code, String desc) {
        return new ResponseVO<T>(code, desc, null);
    }

    public static <T> ResponseVO<T> createOK() {
        return new ResponseVO<T>(2, "请求成功!", null);
    }

    public static <T> ResponseVO<T> createOK(T data) {
        return new ResponseVO<T>(1, "请求成功!", data);
    }

    public static <T> ResponseVO<T> createOKMSG(String desc) {
        return new ResponseVO<T>(1, desc);
    }
}

四、接口使用方式

验证参数前增加:@Validated


import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

/**
 *
 * @author zxl
 **/
@Api(tags = "测试接口")
@RestController
@RequestMapping("/api/sys/user")
public class SysUserController {

    @ApiOperation(value = "测试注解验证")
    @PostMapping("/test")
    public ResponseVO<?> testAnn(@Validated @RequestBody CreateSysUserTestRequestVO p, HttpServletRequest request) {
        System.out.println(p);
        return ResponseVO.createOK();
    }

}

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- niushuan.com 版权所有 赣ICP备2024042780号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务