例如我有这样一个数据模型:
@NotEmpty(message = "name can not be null.")
@Length(min = 2, max = 20)
private String name;
@NotNull(message = "age can not be null")
@Range(min = 12, max = 99, message = "age is between 12 to 99")
private Integer age;
private Gender gender;
其中Gender类定义如下:
public enum Gender {
MALE(0),
FEMALE(1);
private Integer code;
Gender(Integer code) {
this.code = code;
}
@JsonValue
public Integer getCode() {
return code;
}
@JsonCreator
public static Gender getGender(Integer code) {
for (Gender gender : Gender.values()) {
if (gender.getCode().equals(code)) {
return gender;
}
}
return null;
}
}
使用spring做restful风格的开发,定义一个这样的controller
@PostMapping(value = "enum", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseResult getEnumUser(@Valid @RequestBody EnumUser enumUser, BindingResult result) {
if (result.hasErrors()) {
return ResponseResult.newFailedResult(1, result.getFieldError().getDefaultMessage());
}
return ResponseResult.newSucceedResult(enumUser);
}
前面的两个字段name和age可以很好的被框架处理,且返回错误信息到response中去,但是枚举这个就没有想到好的办法,如果是自定义枚举校验注解的话,怎么去定义一个自定义的枚举类型的校验注解?
其实不用这种方式,直接在后面加个if else判断也就可以做判断校验的,但是感觉不优雅,如果能够做到全部由校验框架去处理的话,我们就只需要关注业务逻辑了。