编写实体类
在使用@Valid注解对于对象进行验证时,需要在对象需要验证的属性上方通过注解来标注。
import javax.validation.constraints.*;
public class InfoDTO{
private String id;
//不能为空字符串
@NotBlank(message = "名称不能为空")
private String name;
//最大最小值
@Max(value = 150 , message = "年龄最大值不能超过150")
@Min(value = 0 , message = "年龄最小值不能低于0")
private int age;
//邮箱格式验证
@Email(message = "邮箱格式错误")
private String email;
//Getters and Setters...
}
后台接收参数
在后台接收时在参数对象前使用@Valid注解表明参数需要验证。
@RequestMapping("/saveInfo")
public Map<String, Object> saveInfo(@Valid InfoDTO info) {
Map<String, Object> rsMap;
try {
rsMap = baseModelService.saveInfo(info);
} catch (Exception e) {
logger.warn("保存信息出错", e);
rsMap = ResultUtils.fail("信息保存失败");
}
return rsMap;
}
测试结果
在完成以上的两步操作之后,启动项目使用postman进行测试,发现对于validate验证已经生效了,但是前端的返回值并不友好,此时可以通过自定义一个全局的异常处理类在参数验证失败时返回我们想要的数据给前端。
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Map;
/**
* 全局异常处理类
* @author anti_996
*/
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(BindException.class)
@ResponseBody
public Map<String,Object> argumentValidException(){
return ResultUtils.fail("参数验证失败");
}
}
启动项目,用postman测试,可以看到现在返回值已经达到了预期的目标。