рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ + рдкрд╣рд▓реВ: рд╕рддреНрдпрд╛рдкрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ

рд╢реБрдн рджрд┐рди, рд╣реЗрдмреНрд░!

рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕ рдмрд╛рд░, рд▓реЗрдЦ рдорд╛рдирдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛, рдФрд░ рдЬрд╣рд╛рдВ рднреА рд╣рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд░реЗрдВред рдЦреИрд░, рдЗрд╕рдиреЗ рдореБрдЭреЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ - рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рдХреА рдХрдореА, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд░реВрд╕реА рдореЗрдВред

рд╕рдорд╕реНрдпрд╛


рддреЛ, рдЖрд╡реЗрджрди рдХрд╛ рд╕рд╛рд░ рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ: рдПрдХ рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рд╣реИ - рдПрдкреАрдЖрдИ рдЬреЛ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдЧреЗ рдЗрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдмреИрдВрдХ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдФрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдмреИрдВрдХ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдЕрд▓рдЧ рдерд╛ - рд╕рд╛рде рд╣реА рд╕рддреНрдпрд╛рдкрди рдкреИрд░рд╛рдореАрдЯрд░ рднреАред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрдиреБрд░реЛрдз рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред рджреЛ рддрд░реАрдХреЗ рдереЗ - javax.validation рд╕реЗ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╛ рдЕрдкрдиреА рдЕрд▓рдЧ рдорд╛рдиреНрдпрддрд╛ рдкрд░рдд рд▓рд┐рдЦреЗрдВред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдкрдХрдбрд╝ рдереА - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдХреЗрд╡рд▓ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдиреБрдХрд╕рд╛рди рднреА рдереЗ - рдпрд╣ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рдд рд╣реИ, рдХреЛрдб рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдореЙрдбрд▓ рдмрджрд▓реЗ рдЧрдП рдереЗ, рддреЛ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдорд╛рдирдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рдФрд░ рди рдХреЗрд╡рд▓ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВред

рд╣рдо рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ


Google рдореЗрдВ рдЦреБрджрд╛рдИ рдХреЗ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреЗ рдмрд╛рдж, рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рдкрд╛рдП рдЧрдП, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ javax.validation.Validator рдХреЛ рдСрдЯреЛрд╡реЙрдпрд░ рдХрд░рдирд╛ рдФрд░ рдЙрд╕ рдкрд░ рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡реИрдз рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдЬрдЧрд╣ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдореИрдВ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рдЪрд╛рд╣рддрд╛ рдерд╛ред

AOP рдЬреЛрдбрд╝реЗрдВ


рджреЛ рдмрд╛рд░ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛, рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдкрд╣рд▓реБрдУрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рддрд░реНрдХ рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдерд╛: рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рдмрдирд╛рдПрдВ, рдФрд░ рдЗрд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдкрд░ рд▓рдЯрдХрд╛рдПрдВ рдЬреЛ рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкрд╣рд▓реВ рдореЗрдВ рдЖрдЧреЗ, рд╣рдо рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдЬрд┐рд╕ рд╡реИрд▓реНрдпреВ рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рд▓рд┐рдП рд╡реИрд▓рд┐рдб рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВред рд▓рд╛рднред

рддреЛ рдПрдиреЛрдЯреЗрд╢рди:

//      @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Validate {} 


рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ:

 @Validate public SomeBankRequest requestToBankRequest(Request<T> request) { SomeBankRequest bankRequest = ...; ... //        ... return bankRequest; } 

рдареАрдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╣рд▓реВ рд╣реА:

 @Aspect @Component public class ValidationAspect { private final Validator validator; //    public ValidationAspect(Validator validator) { this.validator = validator; } //       // @Validate       @AfterReturning(pointcut = "@annotation(api.annotations.Validate)", returning = "result") public void validate(JoinPoint joinPoint, Object result) { //     Set<ConstraintViolation<Object>> violations = validator.validate(result); //    ,    ,     //        if (!violations.isEmpty()) { StringBuilder builder = new StringBuilder(); //          ,   //  violations.forEach(violation -> builder .append(violation.getPropertyPath()) .append("[" + violation.getMessage() + "],")); throw new IllegalArgumentException("Invalid values for fields: " + builder.toString()); } } } 

рдХрд╛рдо рдХреЗ рдкрд╣рд▓реВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:

рд╣рдо рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд╛рдкрд╕ Set<ConstraintViolation<Object>> рдХрд░реЗрдЧрд╛ Set<ConstraintViolation<Object>> - рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рдорд╛рдиреНрдп рдлрд╝реАрд▓реНрдб рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯред рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╕реЗрдЯ рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдлрд┐рд░ рд╣рдо рд╕рд┐рд░реНрдл рд╕реЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдлрд╝реАрд▓реНрдб рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВред

 violation.getPropertyPath() -    violation.getMessage() -  ,       

рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЖрд╡реЗрджрди рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрд┐рдВрджреБ рдкрд░ рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдорд╛рдиреНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд╣рдо рдПрдиреЛрдЯреЗрд╢рди рдФрд░ рдкрд╣рд▓реВ рдХреЛ рдкреВрд░рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рддреНрдпрд╛рдкрди рди рдХреЗрд╡рд▓ рдЙрди рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреБрдЬрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдлрд╝реАрд▓реНрдб рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рднреАред

рдкреБрдирд╢реНрдЪ


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдЙрд╕реА рд╡рд░реНрдЧ рдХреА рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдзрд┐ рд╕реЗ рдорд╛рдиреНрдп рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЕрдиреВрдк рдФрд░ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВред

Source: https://habr.com/ru/post/hi432040/


All Articles