您的位置:首页 > 编程语言 > Java开发

SpringMVC 使用JSR-303进行校验Bean Validation------分组校验

2018-02-24 16:42 405 查看
如果同一个类,在不同的使用场景下有不同的校验规则,那么可以使用分组校验。未成年人是不能喝酒的,而在其他场景下我们不做特殊的限制,这个需求如何体现同一个实体,不同的校验规则呢?

改写注解,添加分组:

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Email;

import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;

/**
* 测试@Validate SpringMVC 使用JSR-303进行校验
*
* @create 2018-02-23 18:05
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {
@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120",groups = {Adult.class})
private int age;
@Email(message="邮箱格式错误",groups = {Other.class})
private String email;

public interface  Adult{}//分组

public interface Other{}
}


这表明只哟偶在Adult分组下,age最大值为120的校验才起作用。

在Other分组下邮箱才校验格式

下面编写Controller层

@RequestMapping(value = "/adult",method = RequestMethod.POST)
public Result groupValid(@RequestBody @Validated({User.Adult.class}) User user, BindingResult result){
if (result.hasErrors()){
List<ObjectError> errorList = result.getAllErrors();
for(ObjectError error : errorList){
System.out.println(error.getDefaultMessage());
return  new Result<String>("1",error.getDefaultMessage(),null);
}
}
System.out.println(user.getEmail());
return new Result<String>("0","success",null);
}

@RequestMapping(value = "/other",method = RequestMethod.POST)
public Result groupOtherValid(@RequestBody @Validated({User.Other.class}) User user, BindingResult result){
if (result.hasErrors()){
List<ObjectError> errorList = result.getAllErrors();
for(ObjectError error : errorList){
System.out.println(error.getDefaultMessage());
return  new Result<String>("1",error.getDefaultMessage(),null);
}
}
System.out.println(user.getEmail());
return new Result<String>("0","success",null);
}


使用postMan发起请求,验证结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  validation 分组校验