您好,欢迎来到99网。
搜索
您的当前位置:首页关于实体类校验属性必填

关于实体类校验属性必填

来源:99网

实体类

import javax.validation.constraints.NotBlank;

@Data
public class User {
	@NotBlank(message="名称为空")
	private string username;
	@NotBlank(message="密码为空")
	private string password;
}

Controller

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;

@RestController
public class UserController {
	@PostMapping("/users")
	public string createUser(@Valid @RequestBody User user){
		return server.insert(user);
	}
}

这样写他的返回是有问题的

他是一个未解析的返回体 BindingResult ,我们需要在接参时加上 BindingResult result参数:

@PostMapping("/users")
	public string createUser(@Valid @RequestBody User user,BindingResult result){
		return server.insert(user,result);
	}

并且在service层解析它:

 if(result.hasErrors()){
     validate = Validator.validate(result);
     if(!"".equals(validate)){
     	new throw Exception(validate);
     }
 }else{
 	//逻辑代码
 }
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class Validator {
    public static String validate(BindingResult result) throws IllegalAccessException {
        String errors ="";
        var allErrors = result.getAllErrors();
        for (var i = 0; i<allErrors.size();i++) {
            var objectError = allErrors.get(i);
            //errors[i]=objectError;.
            errors+="[";
            var defaultMessage = objectError.getDefaultMessage();
            errors+=defaultMessage;
            errors+="]";
        }
        return errors;//返回为[名称为空][密码为空]
    }
}

这样很影响我们的优雅度!!!
找到另一个大神文章

只需要添加一个拦截类,就可以一个一个返回 校验失败的信息啦~(名称为空) :

import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.List;

@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    /**
     * 自定义验证异常
     * MethodArgumentNotValidException 方法参数无效异常
     */
    @ResponseStatus(HttpStatus.BAD_REQUEST) //设置状态码为 400
    @ExceptionHandler({MethodArgumentNotValidException.class})
    public String paramExceptionHandler(MethodArgumentNotValidException e) {
        BindingResult exceptions = e.getBindingResult();
// 判断异常中是否有错误信息,如果存在就使用异常中的消息,否则使用默认消息
        if (exceptions.hasErrors()) {
            List errors = exceptions.getAllErrors();
            if (!errors.isEmpty()) {
// 这里列出了全部错误参数,按正常逻辑,只需要第一条错误即可
                FieldError fieldError = (FieldError) errors.get(0);
                return fieldError.getDefaultMessage();
            }
        }
        return "请求参数错误";
    }
}

完美~~ 撒花~~ ✿✿✿

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

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

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

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