springboot validator 验证器

曾经终败给现在 2023-02-26 13:22 18阅读 0赞

springboot validator 验证器

**********************

相关类与接口

Validator:spring 提供接口,可对类进行验证

  1. public interface Validator {
  2. boolean supports(Class<?> clazz); //验证的类
  3. void validate(Object target, Errors errors); //自定义验证规则
  4. }

DataBinder

  1. public class DataBinder implements PropertyEditorRegistry, TypeConverter {
  2. public static final String DEFAULT_OBJECT_NAME = "target";
  3. public static final int DEFAULT_AUTO_GROW_COLLECTION_LIMIT = 256;
  4. protected static final Log logger = LogFactory.getLog(DataBinder.class);
  5. private final Object target;
  6. private final String objectName;
  7. private AbstractPropertyBindingResult bindingResult;
  8. private SimpleTypeConverter typeConverter;
  9. private boolean ignoreUnknownFields = true;
  10. private boolean ignoreInvalidFields = false;
  11. private boolean autoGrowNestedPaths = true;
  12. private String[] allowedFields;
  13. private String[] disallowedFields;
  14. private String[] requiredFields;
  15. private ConversionService conversionService;
  16. private MessageCodesResolver messageCodesResolver;
  17. private BindingErrorProcessor bindingErrorProcessor = new DefaultBindingErrorProcessor();
  18. private int autoGrowCollectionLimit = DEFAULT_AUTO_GROW_COLLECTION_LIMIT;
  19. private final List<Validator> validators = new ArrayList<>();
  20. **************
  21. 构造函数
  22. public DataBinder(@Nullable Object target) {
  23. public DataBinder(@Nullable Object target, String objectName) {
  24. **************
  25. 普通方法
  26. public boolean isAutoGrowNestedPaths() {
  27. public Object getTarget() {
  28. public String getObjectName() {
  29. public int getAutoGrowCollectionLimit() {
  30. public void setAutoGrowNestedPaths(boolean autoGrowNestedPaths) {
  31. public void setAutoGrowCollectionLimit(int autoGrowCollectionLimit) {
  32. public void initBeanPropertyAccess() {
  33. public void initDirectFieldAccess() {
  34. ***********
  35. 验证器
  36. public void setValidator(@Nullable Validator validator) {
  37. public void addValidators(Validator... validators) {
  38. public void replaceValidators(Validator... validators) {
  39. public Validator getValidator() {
  40. public List<Validator> getValidators() {
  41. private void assertValidators(Validator... validators) {
  42. ***********
  43. 格式化器
  44. public void addCustomFormatter(Formatter<?> formatter) {
  45. public void addCustomFormatter(Formatter<?> formatter, String... fields) {
  46. public void addCustomFormatter(Formatter<?> formatter, Class<?>... fieldTypes) {
  47. ***********
  48. 自定义编辑器
  49. public void registerCustomEditor(Class<?> requiredType, PropertyEditor propertyEditor) {
  50. public void registerCustomEditor(@Nullable Class<?> requiredType, @Nullable String field, PropertyEditor propertyEditor) {
  51. public PropertyEditor findCustomEditor(@Nullable Class<?> requiredType, @Nullable String propertyPath) {
  52. ***********
  53. convertIfNecessary操作
  54. public <T> T convertIfNecessary(@Nullable Object value, @Nullable Class<T> requiredType) throws TypeMismatchException {
  55. public <T> T convertIfNecessary(@Nullable Object value, @Nullable Class<T> requiredType,
  56. @Nullable MethodParameter methodParam) throws TypeMismatchException {
  57. public <T> T convertIfNecessary(@Nullable Object value, @Nullable Class<T> requiredType, @Nullable Field field)
  58. throws TypeMismatchException {
  59. public <T> T convertIfNecessary(@Nullable Object value, @Nullable Class<T> requiredType,
  60. @Nullable TypeDescriptor typeDescriptor) throws TypeMismatchException {
  61. public BindingResult getBindingResult() {
  62. public void bind(PropertyValues pvs) {
  63. protected void doBind(MutablePropertyValues mpvs) {
  64. public boolean isIgnoreInvalidFields() {
  65. public boolean isIgnoreUnknownFields() {
  66. public void setIgnoreUnknownFields(boolean ignoreUnknownFields) {
  67. public void setIgnoreInvalidFields(boolean ignoreInvalidFields) {
  68. public void setAllowedFields(@Nullable String... allowedFields) {
  69. public void setDisallowedFields(@Nullable String... disallowedFields) {
  70. public void setRequiredFields(@Nullable String... requiredFields) {
  71. public String[] getAllowedFields() {
  72. public String[] getDisallowedFields() {
  73. public String[] getRequiredFields() {
  74. public void setMessageCodesResolver(@Nullable MessageCodesResolver messageCodesResolver) {
  75. public void setBindingErrorProcessor(BindingErrorProcessor bindingErrorProcessor) {
  76. public void setConversionService(@Nullable ConversionService conversionService) {
  77. public BindingErrorProcessor getBindingErrorProcessor() {
  78. public ConversionService getConversionService() {
  79. public void validate() {
  80. public void validate(Object... validationHints) {
  81. public Map<?, ?> close() throws BindException {
  82. protected void checkAllowedFields(MutablePropertyValues mpvs) {
  83. protected boolean isAllowed(String field) {
  84. protected void checkRequiredFields(MutablePropertyValues mpvs) {
  85. protected void applyPropertyValues(MutablePropertyValues mpvs) {
  86. protected AbstractPropertyBindingResult createBeanPropertyBindingResult() {
  87. protected AbstractPropertyBindingResult createDirectFieldBindingResult() {
  88. protected AbstractPropertyBindingResult getInternalBindingResult() {
  89. protected ConfigurablePropertyAccessor getPropertyAccessor() {
  90. protected SimpleTypeConverter getSimpleTypeConverter() {
  91. protected PropertyEditorRegistry getPropertyEditorRegistry() {
  92. protected TypeConverter getTypeConverter() {

**********************

示例

*****************

pojo 层

Order

  1. @Data
  2. public class Order {
  3. private String orderId;
  4. private Double price;
  5. private Integer amount;
  6. private Double totalFee;
  7. }

*****************

config 层

CustomValidatior

  1. public class CustomValidator implements Validator {
  2. @Override
  3. public boolean supports(Class<?> clazz) {
  4. return Order.class.equals(clazz);
  5. }
  6. @Override
  7. public void validate(Object target, Errors errors) {
  8. Order order=(Order)target;
  9. if (Math.abs(order.getTotalFee()-order.getPrice()*order.getAmount())>0.01){
  10. errors.rejectValue("totalFee","totalFeeError","totalFee 与 price*amount 相差超过 0.01");
  11. }
  12. }
  13. }

*****************

controller 层

HelloController

  1. @RestController
  2. public class HelloController {
  3. @RequestMapping("/hello")
  4. public String hello(@Validated Order order, BindingResult result){
  5. System.out.println(order);
  6. if (result.hasErrors()){
  7. result.getAllErrors().forEach(error -> {
  8. System.out.print("field:"+error.getObjectName()+" "+error.getCode());
  9. System.out.println(" ==> message:"+error.getDefaultMessage());
  10. });
  11. }
  12. return "success";
  13. }
  14. @InitBinder
  15. private void bind(DataBinder binder){
  16. binder.setValidator(new CustomValidator());
  17. }
  18. }

**********************

示例

localhost:8080/hello?orderId=1&price=2&amount=8&totalFee=8

  1. 2020-07-15 21:19:00.890 INFO 14568 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
  2. 2020-07-15 21:19:00.898 INFO 14568 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 8 ms
  3. Order(orderId=1, price=2.0, amount=8, totalFee=8.0)
  4. fieldorder totalFeeError ==> messagetotalFee price*amount 相差超过 0.01

自定义验证规则设置成功

发表评论

表情:
评论列表 (有 0 条评论,18人围观)

还没有评论,来说两句吧...

相关阅读