使用BindingResult校验参数

1、创建一个参数对象

import java.util.List;
 
import javax.validation.constraints.Min;
import javax.validation.constraints.Size;
 
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
 
public class Parameter {
    
	@NotEmpty(message="姓名不能为空")
	private String name;
	
	@Min(value = 18, message = "年龄必须大于18岁")
	private int age;
	
	@NotEmpty(message="hobbies不能为空")
	private List<String> hobbies;
	
	@NotBlank(message="账号不能为空")
	private String account;
	
	@Size(min=5,max=10,message="密码的长度应该在5和10之间") 
	private String password;
	
	@Email(message="邮箱格式错误")
	private String email;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public List<String> getHobbies() {
		return hobbies;
	}
	public void setHobbies(List<String> hobbies) {
		this.hobbies = hobbies;
	}
	public String getAccount() {
		return account;
	}
	public void setAccount(String account) {
		this.account = account;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	 
	
	
}

2、controller控制层写参数接收的入口,需要注意的是@Valid 和 BindingResult 是一 一对应的,如果有多个@Valid,那么每个@Valid后面都需要添加BindingResult用于接收bean中的校验信息

@RequestMapping(value = "/test", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
	public @ResponseBody ResponseEntity<Pesponsibles> testBindingResult(@Valid @RequestBody Parameter parameter,BindingResult bindingResult)
			{
		log.info("test start");
		Pesponsibles pesponsibles=new Pesponsibles();
		if(bindingResult.hasErrors()){
			 List<FieldError> fieldErrors = bindingResult.getFieldErrors();
			 fieldErrors.forEach(fieldError -> {
                   //日志打印不符合校验的字段名和错误提示
                   log.error("error field is : {} ,message is : {}", fieldError.getField(), fieldError.getDefaultMessage());
                 });
			 for(int i=0;i<fieldErrors.size();i++){
                    //控制台打印不符合校验的字段名和错误提示
			System.out.println("error field is :"+fieldErrors.get(i).getField()+",message is :"+fieldErrors.get(i).getDefaultMessage());
			 }
			// pesponsibles.setError_msg(fieldErrors);
			return new ResponseEntity<>(pesponsibles, HttpStatus.BAD_REQUEST);
		}
		return new ResponseEntity<>(pesponsibles, HttpStatus.OK);
	}

或者在统一异常处理中进行处理

@ControllerAdvice
public class GlobalExceptionHandler  extends DefaultHandlerExceptionResolver {


    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);


    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public Json MethodArgumentNotValidException(MethodArgumentNotValidException e) {
        BindingResult rs = e.getBindingResult();
        if (rs.hasErrors()) {
            for (ObjectError error : rs.getAllErrors()) {
                return Json.fail("", error.getDefaultMessage());
            }
        }
        return Json.fail();
    }




}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值