說明:Validation 在Controller層使用Validation應(yīng)該都使用過了,以下方式可以使用 Validation 在Service層完成對dto的屬性校驗艇纺,避免寫一堆的 if else 來處理這些邏輯怎静,提高開發(fā)效率,代碼如下:
1:DTO實體類代
@Data
public class AddUserParamsDto implements Serializable {
private Integer id;
@NotEmpty(message = "用戶名不能為空")
private String username;
@Length(min = 6, message = "密碼長度不能小于6")
private String password;
@Max(value = 120, message = "年齡必須在18-120之間")
@Min(value = 18, message = "年齡必須在18-120之間")
private Integer age;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date birthday;
private String description;
}
2:可以將ValidatorFactory的創(chuàng)建放入配置類里黔衡,后期如果使用 Validation 可以直接使用Spring的IOC進(jìn)行注入蚓聘,實現(xiàn)代碼重用性。
@Configuration
public class ValidatorConfigBean {
@Bean
public ValidatorFactory validatorFactory() {
return Validation.byProvider(HibernateValidator.class)
.configure()
.failFast(false)
.buildValidatorFactory();
}
@Bean
public Validator validator(ValidatorFactory validatorFactory) {
return validatorFactory.getValidator();
}
}
3:Controller層測試接口
@RestController
public class UserController {
@Resource
private UserService userService;
@GetMapping("/test/valid")
public Object validToService() {
AddUserParamsDto dto = new AddUserParamsDto();
dto.setUsername(null);
dto.setAge(200);
dto.setPassword("123");
return userService.validToService(dto);
}
}
4:Service層代碼盟劫,可以注入ValidatorFactory手動創(chuàng)建Validator對象夜牡,也可直接注入Validator對象
@Service
public class UserServiceImpl implements UserService {
@Resource
private Validator validator;
@Override
public Object validToService(AddUserParamsDto dto) {
List<String> list = new ArrayList<>();
Set<ConstraintViolation<AddUserParamsDto>> violations = validator.validate(dto);
for (ConstraintViolation<AddUserParamsDto> violation : violations) {
list.add(violation.getMessage());
}
return list;
}
}