关于实体类校验属性必填

关于实体类校验属性必填

实体类

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. **前端配置**: - 在前端页面中,确保必填字段的输入框使用了必填校验属性。例如,使用`required`属性来标记必填字段。 - 在前端表单验证中,添加对必填字段的校验逻辑。可以在表单提交前进行验证,确保必填字段不为空。 2. **后端配置**: - 在后端实体类中,使用JSR-303注解来标记必填字段。例如,使用`@NotNull`或`@NotBlank`注解来标记必填字段。 - 在后端控制器中,添加全局异常处理,捕获校验失败的异常,并返回相应的错误信息给前端。 3. **导入逻辑处理**: - 在导入数据的方法中,解析上传的文件,并将数据映射到实体类。 - 在保存数据之前,调用JSR-303校验框架进行校验,确保必填字段不为空。 - 如果校验失败,返回错误信息给前端,并中止导入操作。 以下是一个简单的示例: ```java // 实体类 import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; public class User { @NotNull(message = "用户ID不能为空") private Long id; @NotBlank(message = "用户名不能为空") private String username; // getters and setters } // 控制器 import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.springframework.web.multipart.MultipartFile; @RestController @RequestMapping("/user") @Validated public class UserController { @PostMapping("/import") public String importUser(@RequestParam("file") MultipartFile file) { try { // 解析文件并映射到实体类 List<User> users = parseFile(file); // 校验数据 ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); for (User user : users) { Set<ConstraintViolation<User>> violations = validator.validate(user); if (!violations.isEmpty()) { return "导入失败: " + violations.iterator().next().getMessage(); } } // 保存数据 userService.saveAll(users); return "导入成功"; } catch (Exception e) { return "导入失败: " + e.getMessage(); } } private List<User> parseFile(MultipartFile file) { // 解析文件逻辑 return new ArrayList<>(); } } ``` 通过以上配置,可以在若依系统中实现导入数据的必填字段校验,确保数据不为空。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值