关于实体类校验属性必填

关于实体类校验属性必填

实体类

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);
	}
}

这样写他的返回是有问题的
在这里插入图片描述
返回的是
Validation failed for object='asilalMonitorEguipment'. Error count: 2

他是一个未解析的返回体 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;//返回为[名称为空][密码为空]
    }
}

这样很影响我们的优雅度!!!
找到另一个大神文章https://www.jb51.net/program/329986xl1.htm

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

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 "请求参数错误";
    }
}

完美~~ 撒花~~ ✿✿✿

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值