рдж 10 рдореЛрд╕реНрдЯ рдХреЙрдорди рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрд░рд░реНрд╕

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЛ рдЯреЛрдиреА рдХреБрдХреБрд░рд┐рди рдХреЗ рд▓реЗрдЦ "рдЯреЙрдк 10 рдореЛрд╕реНрдЯ рдХреЙрдорди рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдорд┐рд╕реНрдЯреЗрдХреНрд╕" рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред

рд╡рд╕рдВрдд рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЬрд╛рд╡рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рд╕рд╛рде рд╣реА рд╡рд╢ рдореЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЬрд╛рдирд╡рд░ рд╣реИред рдпрджреНрдпрдкрд┐ рдЗрд╕рдХреА рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╕рдордЭрдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдордЬрдмреВрдд рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░ рдмрдирдиреЗ рдореЗрдВ рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рд▓рдЧрддрд╛ рд╣реИред

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

рдЖрдо рдЧрд▓рддреА # 1: рдмрд╣реБрдд рдиреАрдЪреЗ рдЙрддрд░реЛ


рд╣рдо рдЗрд╕ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ "рдпрд╣рд╛рдВ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ" рд╕рд┐рдВрдбреНрд░реЛрдо рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХрд╛рдлреА рдЖрдо рд╣реИред рд▓рдХреНрд╖рдгреЛрдВ рдореЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕рд╕реЗ рдкреАрдбрд╝рд┐рдд рд▓рдЧрддреЗ рд╣реИрдВред

рдпрджреНрдпрдкрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЗрдирд╕рд╛рдЗрдб рдХреЛ рд╕рдордЭрдирд╛ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдЙрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдЪреНрдЫрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдФрд░ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ), рдПрдХ рд╣реА рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рд╣рд▓ рдХрд░рдирд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╣рд╛рдирд┐рдХрд╛рд░рдХ рд╣реИред рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЬреИрд╕реЗ рдЕрдореВрд░реНрдд рдФрд░ рдЪреМрдЦрдЯреЗ рдореМрдЬреВрдж рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рджреЛрд╣рд░рд╛рдП рдЧрдП рд╣рд╕реНрддрд╢рд┐рд▓реНрдк рд╕реЗ рд╕рдЦреНрддреА рд╕реЗ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ - рдЖрдкрдХреЗ рдбреЛрдореЗрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХред

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

@Getter @Setter @NoArgsConstructor public class Bean implements Serializable { int firstBeanProperty; String secondBeanProperty; } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИ:

 public class Bean implements Serializable { private int firstBeanProperty; private String secondBeanProperty; public int getFirstBeanProperty() { return this.firstBeanProperty; } public String getSecondBeanProperty() { return this.secondBeanProperty; } public void setFirstBeanProperty(int firstBeanProperty) { this.firstBeanProperty = firstBeanProperty; } public void setSecondBeanProperty(String secondBeanProperty) { this.secondBeanProperty = secondBeanProperty; } public Bean() { } } 

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрдИрдбреАрдИ рдХреЗ рд╕рд╛рде рд▓реЛрдореНрдмреЛрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдкреНрд▓рдЧрдЗрди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред IntelliJ IDEA рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдЖрдо рдЧрд▓рддреА # 2: рдЖрдВрддрд░рд┐рдХ рд╕рд╛рдордЧреНрд░реА рд▓реАрдХ


рдЕрдкрдиреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реЗрд╡рд╛ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдЕрдирдореНрдпрддрд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЦрд░рд╛рдм рдХреЛрдбрд┐рдВрдЧ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрддрд╛ рд╣реИред рдЖрдВрддрд░рд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдПрдХ "рд░рд┐рд╕рд╛рд╡" рдЗрд╕ рддрдереНрдп рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреБрдЫ рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╕реЗ рд╕реБрд▓рдн рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдирд┐рдореНрди POJO ("рдкреНрд▓реЗрди рдУрд▓реНрдб рдЬрд╛рд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ") рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ:

 @Entity @NoArgsConstructor @Getter public class TopTalentEntity { @Id @GeneratedValue private Integer id; @Column private String name; public TopTalentEntity(String name) { this.name = name; } } 

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

 @AllArgsConstructor @NoArgsConstructor @Getter public class TopTalentData { private String name; } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдбреЗрдЯрд╛рдмреЗрд╕ рдмреИрдХрдПрдВрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рд╕реЗ рд╕рд░реНрд╡рд┐рд╕ рд▓реЗрдпрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╛рд╕рд╡рд░реНрдб рд╣реИрд╢ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TopTalentEntity рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ - TopTalentData рдЬреИрд╕реЗ рдХрдиреЗрдХреНрдЯрд░ рдХреЗ рдмрд┐рдирд╛, рдпрджрд┐ рдЖрдк рд╕реЗрд╡рд╛ рдХреЛ рдмрджрд▓рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рджреГрд╢реНрдпрдкрдЯрд▓ рдЧрд▓рддреА рд╕реЗ рдХреБрдЫ рдЕрд╡рд╛рдВрдЫрдиреАрдп рдЧреБрдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛!

рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреА # 3: рдХрд░реНрддрд╡реНрдпреЛрдВ рдХреЗ рдЕрд▓рдЧрд╛рд╡ рдХреА рдХрдореА


рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдврд╝рддрд╛ рд╣реИ, рдЖрдкрдХрд╛ рдХреЛрдб рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджрд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рдбрдВрдмрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдЪреНрдЫреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣рд░ рдЬрдЧрд╣ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рдиреЗ рд▓рдЧреЗ рд╣реИрдВ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдордирд╛ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рдЖрдо рдЧрд▓рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛрдб рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реИ, рдФрд░ рдпрд╣ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ!

рдЖрдорддреМрд░ рдкрд░ рдХрд░реНрддрд╡реНрдпреЛрдВ рдХреЗ рдкреГрдердХреНрдХрд░рдг рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореМрдЬреВрджрд╛ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИ (рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдо рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ), рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрди рдЬрд╛рдПрдЧрд╛, рдЪрд╛рд╣реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, рд░рдЦрд░рдЦрд╛рд╡, рдпрд╛ рдХрд╣реАрдВ рдмреАрдЪ рдореЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдВрддреНрд░рдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬреЛ рдЕрдкрдиреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ TopTententData рд▓реМрдЯрд╛рддрд╛ рд╣реИ:

 @RestController public class TopTalentController { private final TopTalentRepository topTalentRepository; @RequestMapping("/toptal/get") public List<TopTalentData> getTopTalent() { return topTalentRepository.findAll() .stream() .map(this::entityToData) .collect(Collectors.toList()); } private TopTalentData entityToData(TopTalentEntity topTalentEntity) { return new TopTalentData(topTalentEntity.getName()); } } 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЧрд▓рдд рд╣реИред рдпрд╣ рдПрдХ TopTalentData рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ TopTalentEntity рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦреЗрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ TopTalentController рдХреБрдЫ рдЪреАрдЬреЗрдВ рдпрд╣рд╛рдВ рдХрд░рддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН: рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдирдХреНрд╢реЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ, рдФрд░ TopTalentRepository рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рджреВрд╕рд░реЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ "рдХреНрд▓реАрдирд░" рд╕рдорд╛рдзрд╛рди рдЗрди рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 @RestController @RequestMapping("/toptal") @AllArgsConstructor public class TopTalentController { private final TopTalentService topTalentService; @RequestMapping("/get") public List<TopTalentData> getTopTalent() { return topTalentService.getTopTalent(); } } @AllArgsConstructor @Service public class TopTalentService { private final TopTalentRepository topTalentRepository; private final TopTalentEntityConverter topTalentEntityConverter; public List<TopTalentData> getTopTalent() { return topTalentRepository.findAll() .stream() .map(topTalentEntityConverter::toResponse) .collect(Collectors.toList()); } } @Component public class TopTalentEntityConverter { public TopTalentData toResponse(TopTalentEntity topTalentEntity) { return new TopTalentData(topTalentEntity.getName()); } } 

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

рдЖрдо рдЧрд▓рддреА # 4: рдЕрд╕рдВрдЧрддрд┐ рдФрд░ рдЧрд░реАрдм рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ


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

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

рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд╡рд┐рд╖рдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд, рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдХрднреА рдЦрд░рд╛рдм рд▓рд┐рдЦреЗ рдЧрдП API рд╕реЗ рдЕрдкрд╡рд╛рдж рдЙрддреНрддрд░реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рджрд░реНрджрдирд╛рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрди рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рднреА рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред

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

 @Value public class ErrorResponse { private Integer errorCode; private String errorMessage; } 

рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдЖрдорддреМрд░ рдкрд░ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдПрдкреАрдЖрдИ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк @ExceptionHandler рдПрдиреЛрдЯреЗрд╢рди (рдЖрдо рдЧрд▓рддреА # 6 рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреЙрдорди рдорд┐рд╕реНрдЯреЗрдХ # 5: рдЧрд▓рдд рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ


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

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдмрдЧреНрд╕ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдлрд┐рд░, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдПрдХрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╡рд┐рдЪрд╛рд░ рджрд┐рдП рдЧрдП рд╣реИрдВ:

рдЧреНрд▓реЛрдмрд▓ рд╕реНрдЯреЗрдЯрд╕ рд╕реЗ рдмрдЪреЗрдВ


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

рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдмрдЪреЗрдВ


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

рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рд▓реЙрдЧ рдХрд░реЗрдВ


рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдХрд╣рд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рд╕рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░реА-рд▓реЙрдЧ рдХрд░реЗрдВред рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдмрд╛рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд╣реЛрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдерд╛ рдФрд░ рдЖрдк рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рдХреНрдпреЛрдВ рдмреБрд░рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдлрд┐рд░, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд▓реЙрдЧрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ I / O рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рдЬрдм рднреА рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдереНрд░реЗрдб рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдореМрдЬреВрджрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдереНрд░реЗрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ 8 рдХреА рд╕рд╛рдл-рд╕реБрдерд░реА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реИрд▓реА рдореЗрдВ рдПрдХреНрд╕рдХреЙрд░реНрд╕ рд╕рд░реНрд╡рд┐рд╕реЗрдЬрд╝ рдФрд░ рдХрдВрдкреНрд▓реАрдЯреЗрдмрд▓рдлреНрдпреВрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╕реНрдкреНрд░рд┐рдВрдЧ рднреА DeferredResult рд╡рд░реНрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреА # 6: рдПрдиреЛрдЯреЗрд╢рди-рдЖрдзрд╛рд░рд┐рдд рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛


рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣рдорд╛рд░реА TopTalent рд╕реЗрд╡рд╛, рдирдП рд╕реБрдкрд░ рдЯреИрд▓реЗрдВрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдирдП рдирд╛рдо рдХреЛ рдареАрдХ 10 рд╡рд░реНрдг рд▓рдВрдмрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

 @RequestMapping("/put") public void addTopTalent(@RequestBody TopTalentData topTalentData) { boolean nameNonExistentOrHasInvalidLength = Optional.ofNullable(topTalentData) .map(TopTalentData::getName) .map(name -> name.length() == 10) .orElse(true); if (nameNonExistentOrInvalidLength) { // throw some exception } topTalentService.addTopTalent(topTalentData); } 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдКрдкрд░ (рдЦрд░рд╛рдм рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ "рд╕рд╛рдл" рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рд╣рдо рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ (рдЕрд░реНрдерд╛рдд, TopTalentData null рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╡рд╣ TopTalentData.name рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╡рд╣ TopTalentData.name 10 рд╡рд░реНрдг рд▓рдВрдмрд╛ рд╣реИ), рдФрд░ рдбреЗрдЯрд╛ рдЕрдорд╛рдиреНрдп рд╣реЛрдиреЗ рдкрд░ рдЕрдкрд╡рд╛рдж рднреА рдлреЗрдВрдХрддрд╛ рд╣реИред

рдпрд╣ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдлрд╛рдИ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рддреНрдпрд╛рдкрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП AddTopTalent рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 @RequestMapping("/put") public void addTopTalent(@Valid @NotNull @RequestBody TopTalentData topTalentData) { topTalentService.addTopTalent(topTalentData); } @ExceptionHandler @ResponseStatus(HttpStatus.BAD_REQUEST) public ErrorResponse handleInvalidTopTalentDataException(MethodArgumentNotValidException methodArgumentNotValidException) { // handle validation exception } 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо TopTalentData рд╡рд░реНрдЧ рдореЗрдВ рдХреМрди рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

 public class TopTalentData { @Length(min = 10, max = 10) @NotNull private String name; } 

рд╡рд╕рдВрдд рдЕрдм рдЕрдиреБрд░реЛрдз рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ рдФрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ - рдЕрддрд┐рд░рд┐рдХреНрдд рдореИрдиреБрдЕрд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

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

 @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Documented @Constraint(validatedBy = { MyAnnotationValidator.class }) public @interface MyAnnotation { String message() default "String length does not match expected"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; int value(); } @Component public class MyAnnotationValidator implements ConstraintValidator<MyAnnotation, String> { private int expectedLength; @Override public void initialize(MyAnnotation myAnnotation) { this.expectedLength = myAnnotation.value(); } @Override public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) { return s == null || s.length() == this.expectedLength; } } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХрд░реНрддрд╡реНрдпреЛрдВ рдХреЗ рдкреГрдердХреНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╡реИрдз рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рд╢реВрдиреНрдп рд╣реИ (isValid рд╡рд┐рдзрд┐ рдореЗрдВ рдЕрд╢рдХреНрдд), рдФрд░ рддрдм NotNull рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 public class TopTalentData { @MyAnnotation(value = 10) @NotNull private String name; } 

рдХреЙрдорди рдорд┐рд╕реНрдЯреЗрдХ # 7: рдПрдХреНрд╕рдПрдордПрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдЕрднреА рднреА)


рд╣рд╛рд▓рд╛рдВрдХрд┐ XML рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛ рдХреЛрдб / рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред XML рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗрд╡рд▓ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдЖрд▓реЗрдЦ (рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА) рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХрд┐рди рдмреАрдиреНрд╕ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд░реВрдЯ рдкреИрдХреЗрдЬ рдХреЛ @SpringBootApplication рдХрдВрдкрд╛рдЙрдВрдб рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 

рдпрд╣ рд╕рдордЧреНрд░ рдПрдиреЛрдЯреЗрд╢рди (рдЖрдк рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ) рдмрд╕ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рди рдмреАрдиреНрд╕ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдирд┐рдореНрди рд╡рд░реНрдЧ рд╕реЗрдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдкреИрдХреЗрдЬ (co.kukurin) рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:

  • @Component (TopTalentConverter, MyAnnotationValidator) @RestController (TopTalentController) @Repository (TopTalentRepository) @Service (TopTalentService)
  • @Component (TopTalentConverter, MyAnnotationValidator) @RestController (TopTalentController) @Repository (TopTalentRepository) @Service (TopTalentService)
  • @Component (TopTalentConverter, MyAnnotationValidator) @RestController (TopTalentController) @Repository (TopTalentRepository) @Service (TopTalentService)
  • @Component (TopTalentConverter, MyAnnotationValidator) @RestController (TopTalentController) @Repository (TopTalentRepository) @Service (TopTalentService)

рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ @Configuration рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдХреНрд╖рд╛рдПрдВ рдПрдиреЛрдЯреЗрдЯ рдХреА рдЧрдИ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЬрд╛рд╡рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рднреА рдЬрд╛рдВрдЪрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреА рдирдВрдмрд░ 8: рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдУ


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

рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЗрди-рдореЗрдореЛрд░реА рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ PROM рдореЗрдВ MySQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ URL рдФрд░ (рдЙрдореНрдореАрдж рд╣реИ) рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдлрд╝рд╛рдЗрд▓ рдЖрд╡реЗрджрди


 # set default profile to 'dev' spring.profiles.active: dev # production database details spring.datasource.url: 'jdbc:mysql://localhost:3306/toptal' spring.datasource.username: root spring.datasource.password: 

рдлрд╝рд╛рдЗрд▓ рдЖрд╡реЗрджрди- DEV.YAML


 spring.datasource.url: 'jdbc:h2:mem:' spring.datasource.platform: h2 

рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдЖрдк рдХреЛрдб рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдХрд░рддреЗ рд╕рдордп рдЕрдкрдиреЗ рдФрджреНрдпреЛрдЧрд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдЧрд▓рддреА рд╕реЗ рдХреЛрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрд╡ рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдлрд┐рд░ рд╕рд░реНрд╡рд░ рдкрд░, рдЖрдк JVM рдХреЗ рд▓рд┐рдП -Dspring.profiles.active = рдареЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╡рд╛рдВрдЫрд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдУрдПрд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдо рдЧрд▓рддреА # 9: рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛


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

 public class TopTalentController { private final TopTalentService topTalentService; public TopTalentController() { this.topTalentService = new TopTalentService(); } } 


рд╣рдо рд╡рд╕рдВрдд рдХреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ:

 public class TopTalentController { private final TopTalentService topTalentService; public TopTalentController(TopTalentService topTalentService) { this.topTalentService = topTalentService; } } 

Google рдЯреЙрдХ рдХреА рдорд┐рд╕рдХреЛ рд╣реЗрд╡рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП "рдХрд╛рд░рдгреЛрдВ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рддреА рд╣реИ , рдЗрд╕рд▓рд┐рдП рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╡рд┐рднрд╛рдЬрди рдореЗрдВ (рдХреЙрдорди рдорд┐рд╕реНрдЯреЗрдХреНрд╕ # 3), рд╣рдордиреЗ рд╕реЗрд╡рд╛ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ TopTalentService рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдореЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдЕрд▓рдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреНрд▓рд╛рд╕ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 @Configuration public class SampleUnitTestConfig { @Bean public TopTalentService topTalentService() { TopTalentService topTalentService = Mockito.mock(TopTalentService.class); Mockito.when(topTalentService.getTopTalent()).thenReturn( Stream.of("Mary", "Joel") .map(TopTalentData::new).collect(Collectors.toList())); return topTalentService; } } 

рдлрд┐рд░ рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛ рдирдореВрдирд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирдореВрдирд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 @ContextConfiguration(classes = { SampleUnitTestConfig.class }) 

рдлрд┐рд░ рдпрд╣ рд╣рдореЗрдВ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдореЗрдВ рдХрд╕реНрдЯрдо рдмреАрди рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреА # 10: рдкрд░реАрдХреНрд╖рдг рдпрд╛ рдЧрд▓рдд рдкрд░реАрдХреНрд╖рдг рдХреА рдХрдореА


рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╣реИ, рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рднреВрд▓" рд▓рдЧрддреЗ рд╣реИрдВ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдпрджрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ), рдпрд╛ рдмрд╕ рдЗрд╕реЗ рдмрд╛рдж рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рди рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рдХреЛрдб рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрд╡реЗрджрди рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп, рдЖрдк рд╢рд╛рдпрдж рд╣реА рдХрднреА "рд╕реНрд╡рдЪреНрдЫ" рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рдбрд┐рд╕реНрдкреИрдЪрд░ рд╕реЗрд░реНрд╡рд▓реЗрдЯ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдкрд░ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ HttpServletRequest рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ (рдЬреЛ рдЗрд╕реЗ рдПрдХ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рддрд╛ рд╣реИ, рдХреЗ рд╕рд╛рде рд╕рддреНрдпрд╛рдкрди, рдХреНрд░рдорд╛рдВрдХрди рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛)ред REST рдПрд╢реНрдпреЛрд░реНрдб - MockMVC рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ REST рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдбреАрдПрд╕рдПрд▓ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рд╕рд╛рдмрд┐рдд рд╣реБрдЖ рд╣реИред рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Application.class, SampleUnitTestConfig.class }) public class RestAssuredTestDemonstration { @Autowired private TopTalentController topTalentController; @Test public void shouldGetMaryAndJoel() throws Exception { // given MockMvcRequestSpecification givenRestAssuredSpecification = RestAssuredMockMvc.given() .standaloneSetup(topTalentController); // when MockMvcResponse response = givenRestAssuredSpecification.when().get("/toptal/get"); // then response.then().statusCode(200); response.then().body("name", hasItems("Mary", "Joel")); } } 

SampleUnitTestConfig TopTalentController рдореЗрдВ TopTalentService рдореЙрдХ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рд╕рднреА рд╡рд░реНрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд░реНрдЧ рдХреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдЬрдбрд╝реЛрдВ рд╡рд╛рд▓реЗ рд╕реНрдХреИрдирд┐рдВрдЧ рдкреИрдХреЗрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдорд╛рдирдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред RestAssuredMockMvc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╣рд▓реНрдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдФрд░ / toptal / рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП GET рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрдкреНрд░рд┐рдВрдЧ рдорд╛рд╕реНрдЯрд░ рдмрдиреЗрдВ


рд╡рд╕рдВрдд рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдврд╛рдВрдЪрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЛ рдкреВрд░реНрдг рдирд┐рдкреБрдгрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдорд░реНрдкрдг рдФрд░ рд╕рдордп рд▓реЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдЖрдкрдХреА рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреЛ рдмрдврд╝рд╛рдПрдЧрд╛ рдФрд░ рдЕрдВрддрддрдГ рдЖрдкрдХреЛ рдХреНрд▓реАрдирд░ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдФрд░ рдПрдХ рдмреЗрд╣рддрд░ рдбреЗрд╡рд▓рдкрд░ рдмрди рд╕рдХрддрд╛ рд╣реИред

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

рдЯреИрдЧ
рдЬрд╛рд╡рд╛ рд╕реНрдкреНрд░рд┐рдВрдЧрдлрд╝реНрд░реЗрдорд╡рд░реНрдХ

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ


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

рдЯрд┐рдореЛрдереА рд╢рд┐рдордВрдбрд▓ рдХреЗ рд▓рд┐рдП
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдБред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХреА рдПрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рдд рдЬреЛрдбрд╝ рджреА рдЧрдИ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @JsonIgnore рдЦреЗрддреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ (рдпрджреНрдпрдкрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдбрд┐рдЯреЗрдХреНрд╢рди рд░рдгрдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рдЦрд╛рдорд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде), рд▓реЗрдХрд┐рди рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдпрд╣ рдПрдХ рдорд╣рд╛рди рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рд╣реИред рдЧрд░реНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареЛрдХрд░ ...

Arokiadoss Asirvatham
рдпрд╛рд░, рдПрдХ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╢реБрд░реБрдЖрдд рдХреА рдЧрд▓рддреА: 1) рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛, рдФрд░ 2) рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рдВрдЧрд▓рдЯрди рдХреНрд▓рд╛рд╕ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд╕рд╛рде рдЧреИрд░-рдЕрдиреБрдкрд╛рд▓рди, рдЬреИрд╕реЗ рдХрд┐ рд╕рд┐рдВрдЧрд▓рдЯрди рд╕реНрдХреЛрд▓ рдХреЗ рд╕рд╛рде рдмреАрдиреНрд╕ рдореЗрдВ рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

Hlodowig
рдирдВрдмрд░ 8 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрд╣реБрдд рдЕрд╕рдВрддреЛрд╖рдЬрдирдХ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ:

  • рд╕реБрд░рдХреНрд╖рд╛: рдХреБрдЫ рд▓реЛрдЧ рдХрд╣рддреЗ рд╣реИрдВ: рдпрджрд┐ рдЖрдкрдХрд╛ рднрдВрдбрд╛рд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдерд╛, рддреЛ рдХреНрдпрд╛ рдХреЛрдИ рдЧреБрдкреНрдд рдХреБрдВрдЬреА / рдкрд╛рд╕рд╡рд░реНрдб рд╣реЛрдЧрд╛? рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рд╣реЛрдЧрд╛ред рдЬрдм рддрдХ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк .gitignore рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЧрдВрднреАрд░ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред
  • рдбреБрдкреНрд▓реАрдХреЗрд╢рди: рд╣рд░ рдмрд╛рд░ рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдПрдХ рдирдИ рдкреНрд░реЙрдкрд░реНрдЯреАрдЬ рдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд╛рдлреА рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛред
  • рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА: рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЬреЗрд╡реАрдПрдо рддрд░реНрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╢реВрдиреНрдп рдПрдХ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рдХрдо рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдгред

рдореИрдВрдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ "рд╣рд╛рд░реНрдб рдХреЛрдбрд┐рдВрдЧ" рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдореИрдВ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖ рд╣реВрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдФрд░ рдЕрдзрд┐рдХ рд╢реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдорд╣рд╛рди рд▓реЗрдЦ рдЯреЛрдиреА, рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦреЗрдВ!

рдЕрдиреБрд╡рд╛рдж рдкреВрд░рд╛ рд╣реБрдЖ: tele.gg/middle_java

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


All Articles