如果同一个类,在不同的使用场景下有不同的校验规则,那么可以使用分组校验。未成年人是不能喝酒的,而在其他场景下我们不做特殊的限制,这个需求如何体现同一个实体,不同的校验规则呢?
改写注解,添加分组:
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发起请求,验证结果
想了解更多java相关技术,请关注公众号“JavaEE那些事”
扫描下面二维码,更多技术资料等你来拿