рдкреНрд▓реЗ рдХреЗ рд╕рд╛рде рднрд╛рд░реА рд▓рдбрд╝рд╛рдИ рдХрд╛ рдЪреМрдерд╛ рд╕рдкреНрддрд╛рд╣ рдерд╛! рдлреНрд░реЗрдорд╡рд░реНрдХ 2.1 + рдЬрд╛рд╡рд╛ред рд╡рд┐рдЬрдп рдЕрдХрд╕реНрдорд╛рдд рдирд┐рдХрдЯ рдЖ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реНрдг рдЖрддреНрдорд╕рдорд░реНрдкрдг рд╕реЗ рджреВрд░ рдерд╛редрдкреНрд▓реЗ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддреНрд╕рд╛рд╣рдЬрдирдХ рдЦрдмрд░ рдХреЗ рдмрд╛рдж! 2.1, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
рд▓рд┐рдВрдХреНрдбрдЗрди рдкрд░, рдЗрд╕реЗ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдЬрд╝рдорд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реНрдпрд╛рдкрд╛рд░ рдореЗрдВ рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рд╣реБрдЖ? рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рдФрд░ рдкреНрд▓реЗ рдХреЗ рдмреАрдЪ рдПрдХ рдЫреЛрдЯрд╛ рдпреБрджреНрдз рдерд╛! 2.1ред рдХреНрдпреЛрдВ? рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рд╡рд┐рд╡рд░рдг, рд▓реЗрдХрд┐рди рдЕрдзреАрд░ рдХреЗ рд▓рд┐рдП:
рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд┐рд╖реНрдХрд░реНрд╖
рд╣рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЧреБрдкреНрдд рд╣рдерд┐рдпрд╛рд░ рд▓реЗрдирд╛ рдЬрд░реВрд░реА рдерд╛, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╕реНрдХреИрд▓рд╛ рд╣реИред рдпрджрд┐ рдЖрдк Play рдХреЗ рд╕рд╛рде рдЖрдордиреЗ рд╕рд╛рдордиреЗ рдЖрддреЗ рд╣реИрдВ! 2.1 рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдЕрдкрдиреЗ рд╕рднреА рддрд╛рдХрдд рдХреЗ рд╕рд╛рде рдЪрд┐рд▓реНрд▓рд╛рдУ: "рдЖрдк рдПрдХ рд╕реНрдХрд╛рд▓рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИрдВ!", рдлрд┐рд░ рд╡рд╣ рдЗрд╕ рддрд░рд╣ рдХреА рдкреНрд░рддреНрдпрдХреНрд╖рддрд╛ рд╕реЗ рдбрд░ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдорд╣рд╛рди рдЕрд╡рд╕рд░реЛрдВ рдХреА рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рджрд░рд╡рд╛рдЬреЗ рдЦреБрд▓реЗ рд░реВрдк рд╕реЗ рдХрд░реЗрдЧрд╛ред"рд╕реНрдХрд╛рд▓рд╛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ?" - "рдкреНрд▓реЗ 1.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред"
"рд╢рд╛рд▓рд╛ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд╛рдХрд┐рдл рд╣реИрдВ?" - "2.1 рдЦреЗрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдзреИрд░реНрдп рд░рдЦреЗрдВред тАЭ
рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕
рдПрдХ рддрд▓рд╡рд╛рд░ рдФрд░ рдврд╛рд▓ рдХреЗ рд╕рд╛рде рдорд╛рдЙрд╕ рдФрд░ рдХреАрдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде 7 рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рджреЗрд╢реЛрдВ рдХрд╛ рджреМрд░рд╛ рдХрд┐рдпрд╛ рд╣реИред рдпреЗ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдХреЗ рдкреНрд░рд╛рдЪреАрди рдЦрдВрдбрд╣рд░ рдереЗ, рдЬрд╣рд╛рдВ рдЬреАрд╡рди рдЕрднреА рднреА рдЧрд░реНрдо рд╣реИ, рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧрд▓реИрдВрдб рдХреЛ рдлреВрд▓ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЧреНрд░рд┐рд▓реНрд╕ рд╕рд┐рдЯреА рдореЗрдВ рд░рд╛рдЬрдзрд╛рдиреА рдХреЗ рд╕рд╛рде рдЙрд╕рдХрд╛ рд╡рд╛рд╕рд╛рд▓ рдЧреНрд░рд╛рдЙрд╡рд┐рдВрдбрд┐рдпрд╛, рдФрд░ рдПрдХ рдмрд╛рд░ рдЙрдиреНрдирдд рдФрд░ рд╡рд┐рджреЗрд╢реА рдкреНрд▓реАрдЯреНрд░рд╛ рдкреЗрд░реЛрд╡реЛ, рдФрд░ рдХрдИ, рдХрдИ рдЕрдиреНрдп рд░рд╛рдЬреНрдпреЛрдВ, рд╢рд╣рд░реЛрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рджреВрд░рджрд░рд╛рдЬ рдХреЗ рдЧрд╛рдВрд╡реЛрдВред рд▓реЗрдХрд┐рди рдкреНрд▓реЗрдЯрд░реНрд░рд╛ II рдкрд░ рдЕрднрд┐рдпрд╛рди рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдХрдард┐рди рдерд╛редрд▓рдЧрднрдЧ 9 рдорд╣реАрдиреЗ рддрдХ рдореИрдВрдиреЗ рдкреНрд▓реЗ 1.2.x рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛, рдФрд░ рдмрд┐рд▓реНрдХреБрд▓ рдЦреБрд╢ рдерд╛ред рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ 3 рдХреЗ рдмрд╛рдж рднреА, рдпрд╣ рдЧрддрд┐рдорд╛рди рдФрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд╢рд┐рдЦрд░ рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд░рд╛рдХреНрд╖рд╕реА рдЬрд╛рд╡рд╛ рдИрдИ 5 + рдЬреЗрдПрд╕рдПрдл рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рддрдм рдПрдХ рдЫреЛрдЯрд╛ рдмреНрд░реЗрдХ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ 3 рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд┐рд▓реНрд╕ 2.x рдХреЗ рд╕рд╛рде рдЧрд╣рдирддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рдФрд░ рдпрд╣ рд╕рдордЭрд╛ рдХрд┐ рдЬрд╛рд╡рд╛ рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЧреНрд░реВрд╡реА рд╕реЗ рдХреИрд╕реЗ рдкрд┐рдЫрдбрд╝ рдЧрдпрд╛ред рдФрд░ рдпрд╣ рдХрд┐ рд╢реБрджреНрдз рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ 3 + рдЬрд╛рд╡рд╛ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреНрд░реЗрд▓реНрд╕ рдХреБрдЫ рдЖрд╕рд╛рди рдФрд░ рддреЗрдЬ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдЪреБрдирдиреЗ рдХрд╛ рд╕рдордп рдерд╛, рдФрд░ рд╡рд┐рдХрд▓реНрдк 2.1 рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ред рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рдлреИрд╕рд▓рд╛ рдерд╛? рдпрдХреАрди рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╣реА рдПрдХ - рдпрд╣ рдЕрднреА рднреА рд╕рдордп рджрд┐рдЦрд╛рдПрдЧрд╛ред
рдЗрд╕ рдмреАрдЪ, рдореИрдВ рдкреНрд▓реЗ 2.1 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЗрдВрдкреНрд░реЗрд╢рди рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЬрд╛рд╡рд╛ рдФрд░ рднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд▓рд╛рдк рдХрд░рддреЗ рд╣реБрдП, рдкреНрд▓реЗ 1.2.x рдХреЗ рд╕рд╛рде рдХрдИ рддреБрд▓рдирд╛рдПрдВ рд╣реЛрдВрдЧреАред рд▓рдЧрднрдЧ рдХреЛрдИ рдХреЛрдб рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рд╕реНрд╡реАрдХреГрдд рд╢рд░реНрддреЛрдВ рдФрд░ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рд░реВрд╕реА рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ ред
рдЫрд╛рдкреЛрдВ
рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдЕрднрд╛рд╡
Playterre II рдХреЗ рд╢рд╛рд╕рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдирдХреНрд╢реЗ рдкреВрд░реНрдг рд╕реЗ рдмрд╣реБрдд рджреВрд░ рдереЗред рдореБрдЦреНрдп рд╕рдбрд╝рдХреЛрдВ рдХреЛ рдХрд╛рдлреА рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрди рд╕рдбрд╝рдХреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЕрдЧрдореНрдп рдбрдВрдк рд╣реИред рднрдЯрдХрд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╕реНрдерд╛рдиреАрдп рд▓реЛрдЧреЛрдВ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдЙрдирд╕реЗ рдХрдИ рд╕рд╡рд╛рд▓ рдкреВрдЫреЗред рд╡реИрд╕реЗ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдмрд╣реБрдд рд╕реНрд╡реЗрдЪреНрдЫрд╛ рд╕реЗ рдЙрддреНрддрд░ рджрд┐рдпрд╛редрдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдмрд▓реНрдХрд┐ рдХрдВрдЬреВрд╕ рд╣реИред
рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рдкреНрд▓реЗ 2 рдФрд░ рд╕реНрдХрд╛рд▓рд╛ рдХреЗ рд╕рд╛рде рдкреНрд▓реЗ 2 рдХреА рджреЛ рдХрд┐рддрд╛рдмреЗрдВ рд╣реИрдВред рдЬрд╛рд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓рд╛, рдХрд╛рдлреА рд╣рдж рддрдХ рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИред рджреВрд╕рд░рд╛, рд╕реНрдХрд╛рд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдзреНрдпрд╛рдп 8. JSON рдХреЗ рд╕рд╛рде рдПрдХрд▓-рдкреГрд╖реНрда рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред
рдмреЗрд╢рдХ, рдПрдХ рдмрдбрд╝рд╛ рдФрд░ рд╕рдХреНрд░рд┐рдп рд╕рдореБрджрд╛рдп рд╣реИ, рдЖрдк рдорджрдж рдорд╛рдВрдЧ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░
Google рд╕рдореВрд╣ рдФрд░
Stackoverflow рджреЛрдиреЛрдВ рдкрд░ рдПрдХ рдкреНрд░рд╢реНрди рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдХреА рдЦреБрд╢реА рдХреБрдЫ рд╣рдж рддрдХ рдЦреЛ рдЬрд╛рддреА рд╣реИ рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рд╕рд░рд▓ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рддрд▓рд╛рд╢рдиреЗ рдкрдбрд╝рддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдкреНрд░рд▓реЗрдЦрди (
рдпрд╣рд╛рдВ ) рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рднреА рднрд╛рдЧ рд▓рд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдХрдИ рдЬрдЧрд╣ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХрд╡рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдкреНрд▓реЗ 1.2.x рдХреЗ рд▓рд┐рдП, рдкреНрд░рд▓реЗрдЦрди рдЕрдзрд┐рдХ рдкреВрд░реНрдг рдФрд░ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рдерд╛ред рдХреЗрд╡рд▓ Stackoverflow рдФрд░ Google рд╕рдореВрд╣ рдкрд░ рдЦреЛрдЬ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд╕рд╛рдорд╛рдиреНрдп рдЪреАрдЬреЗрдВ рдереАрдВред
рд╕рдВрдХрд▓рди рдХреА рдЧрддрд┐
рдпрд╣рд╛рдВ рдХреА рд╕рдбрд╝рдХреЗрдВ рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИрдВред рдХрднреА-рдХрднреА рдореБрдЭреЗ рдШрдВрдЯреЛрдВ рд╕рд╡рд╛рд░реА рдХрд░рдиреА рдкрдбрд╝рддреА рдереА, рдХреАрдЪрдбрд╝ рдореЗрдВ рдбреВрдмрдирд╛ рдФрд░ рдШреЛрдбрд╝реЗ рдХреЛ рднреАрдЦ рдирд╣реАрдВ рджреЗрдирд╛ рдФрд░ рддреЗрдЬреА рд╕реЗ рд╕рд╡рд╛рд░реА рдХрд░рдирд╛ред рдПрдХ рдмрдбрд╝реА рд╕реЗрдирд╛ рдХреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдореЗрдВ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рд╕рдбрд╝рдХреЛрдВ рдкрд░ рд╣рд░ рдЬрдЧрд╣ рдЪреМрдХрд┐рдпрд╛рдВ рдФрд░ рдЪреМрдХрд┐рдпрд╛рдВредрдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЦрдмрд░ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╕рдВрдХрд▓рди рдзреАрдорд╛ рд╣реИред рдкреНрд▓реЗ 1.2.x рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдзреАрдорд╛ред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рдпрд╣рд╛рдБ рд╕рдВрдХрд▓рд┐рдд рд╣реИ, рд╕рд░рд▓ рдЬрд╛рд╡рд╛ рдХрдХреНрд╖рд╛рдУрдВ рд╕реЗ рд▓реЗрдХрд░ рд╕реНрдХрд╛рд▓рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдФрд░ рдХреЙрдлреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдХред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд▓рдВрдмрд╛ рд╕рдордп рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЬрд╛рд░реА рд╣реЛ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд▓рдВрдмрд╛ рд╕рдордп рд╣реИред рдмрд┐рдЬрд▓реА рдХреА рддреЗрдЬреА рд╕реЗ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ
рддрд╛рдЬрд╝рд╛ рдХрд░реЗрдВ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕реНрдЯреЙрд▓ рдФрд░ рдПрдиреЙрдп рдХреЛ
рдорд╛рд░реЛ ред
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдкреНрд░рд╕рд┐рджреНрдз рдирд┐рд╡рд╛рд╕рд┐рдпреЛрдВ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд┐рд▓реЗ рдХреИрд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╡реЗ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ: "рдПрдХ рдФрд░ рдЯреЙрд╡рд░ рдХреЛ рдареАрдХ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рд╕реЗ!"ред рдирд╣реАрдВред рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдпреЛрдЬрдирд╛ рдХреА рдЬрд░реВрд░рдд рд╣реИредрдЗрд╕рдореЗрдВ рдмрд┐рд▓реНрдЯ-рдЗрди рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрд╡реЛрд▓реНрдпреВрд╢рди рдЗрдВрдЬрди рд╣реИред рд▓реЗрдХрд┐рди рдЗрди рд▓рд┐рдкрд┐рдпреЛрдВ рдХреА рдкреАрдврд╝реА рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред Ebean рдЕрднреА рднреА рдПрдХ рдкреВрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ
jpa.ddl=update
рд▓рд┐рдП рдПрдирд╛рд▓реЙрдЧ
jpa.ddl=update
рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЕрдЧрд░ рдХреЛрдИ рдореБрдЭреЗ рдмрддрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдмрд╣реБрдд рдЦреБрд╢ рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛ред
LiquiBase's Diff рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдпрд╛ рдЕрдиреБрдХреВрд▓рди рднреА рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред
рдХрд┐рд░рд╛рдП рдХреЗ рдЧреНрд░рд╛рдореАрдг рдЕрдЬреАрдм рдЖрджрдореА рдмрди рдЧрдПред рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рд▓рдЧрд╛рддрд╛рд░ рдЖрдкреВрд░реНрддрд┐ рдореЗрдВ рд╡реНрдпрд╡рдзрд╛рди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВредрдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд░реВрдк рдореЗрдВ
рдИрдмреЗрдпрди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдореБрдЦреНрдп рд▓рд╛рдн:
- рд╕рддреНрд░реЛрдВ рдХреА рдХрдореА (рд╕рддреНрд░, рдПрдВрдЯрд┐рдЯреА рдореИрдирдЬрд░, тАЛтАЛрдЖрджрд┐), рдЬреЛ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣, рдПрдХ рдкрд░реНрд╕реЗрдВрдЯ рдХреЙрдиреНрд╕реЗрдкреНрдЯ рд╣реИред
- рдЖрдВрд╢рд┐рдХ рд╡рд╕реНрддреБрдПрдБ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдкреНрд░рд╢реНрди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИрдВред
рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдореБрджреНрджреЗ:
- рдЖрдВрд╢рд┐рдХ JPA рд╕рдорд░реНрдердиред рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд░реНрдерди рдХрд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
- рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдХрдореАред
- рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд╛рд╕ рдирд╣реАрдВ рдФрд░ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдбрд╝реЗ рд╕рдореБрджрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВред
рдпрд╣рд╛рдВ рднреА рд▓реЗрди-рджреЗрди рд╣реЛрддрд╛ рд╣реИред рдЖрдк рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рдХреЛ рднреА
@Transactional
рдЪрд┐рд╣реНрди рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ рд╣реАред рддреГрддреАрдп-рдкрдХреНрд╖ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, Ebean рдПрдХ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рдХрднреА-рдХрднреА рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдпрд╛ JPA рд╕реЗ рднреА рдЕрдзрд┐рдХ рд╕рд░рд▓ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмрдврд╝рддреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рднреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВред
рдмреЗрд╢рдХ, рдЖрдк рдорд╛рдирдХ JPA рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд▓реЗ 1.2.x рд╕реЗ
Model.find("byName", name)
рдпрд╛
рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ JPA 1 рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдЧрд╛рдпрдм рд╣реИред рдПрдХ рднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд┐рдЫрд▓реЗ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд▓реМрдЯ рд░рд╣реЗ рд╣реИрдВред
рд╡реИрд╕реЗ, Ebean рдореЗрдВ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ: рдЖрдк
Ebean ORB рдкреГрд╖реНрда
рдХреЗ рдХреИрд╡рд┐рдЯреНрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд▓реЗ 2.1, рдЧреЗрдЯреНрдЯрд░ / рд╕реЗрдЯрд░ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рдХрдХреНрд╖рд╛ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдРрд╕реА рд╣рд╕реНрддрд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рд╣реИ, рддреЛ
get
рдпрд╛
set
рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рд╕реЗ рдмрдЪрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
byName
рд▓рд┐рдП, рдореИрдВ рдЕрдм рдХреЗрд╡рд▓ рд╢рдмреНрдж рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВ рдФрд░
byName
рдпрд╛
byEmail
рдХреЙрд▓ рдХрд░рддрд╛
byName
ред
рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдмрд╛рдд, рдЖрдк рдПрдмрд┐рди рдореЗрдВ
рд╣рддреНрдпрд╛рд░реЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рднреА рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреЗрдЯрд▓реЗрд╕рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ
рдкреЗрдЬрд┐рдВрдЧрд▓рд┐рд╕реНрдЯ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИред рдХрд╛рд╢ рдФрд░ рдЖрд╣ред
NoSql рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ Elasticsearch, MongoDB (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреБрдЫ рдЯреБрдХрдбрд╝реЗ) рдФрд░ OrientDB рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрди рдкреНрд▓рдЧ рдЗрди рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ред
рдкрд░реАрдХреНрд╖рдг
рджреБрд╢реНрдорди рдХреА рдЬрд╛рд╕реВрд╕реА рд╕реЗ рд╕реЗрдирд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рд▓рдЧрд╛рддрд╛рд░ рдЬрд╛рдБрдЪ рд╣реЛ рд░рд╣реА рд╣реИред рд╕реНрдерд╛рдиреАрдп рдЬрд╛рдирд╡рд░ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд╕рдВрдЧрдарди рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддреЗ рд╣реИрдВ: рдмрдВрджрд░ рдирд╛рд░рд┐рдпрд▓ рдлреЗрдВрдХрддреЗ рд╣реИрдВ, рдЖрдЗрд╡реА рдЕрдкрдиреЗ рдкреИрд░реЛрдВ рдХреЛ рдмреНрд░реИрдб рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХрднреА-рдХрднреА рдХрд╛рдорд┐рдХреЗрдЬрд╝ рд╕реНрдХреЗрдХ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВредрдпрд╣ рд╣реИ, рдХрдИ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВ: рдореЙрдбрд▓ рдХреА рд╕рд░рд▓ рдЗрдХрд╛рдИ-рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рд▓реЗрдХрд░ рдирд┐рдпрдВрддреНрд░рдХ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕реЗрд▓реЗрдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЗрди-рдореЗрдореЛрд░реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:
@Before public void setUp() throws Exception { start(fakeApplication(inMemoryDatabase(""))); }
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рддреБрд░рдВрдд рджреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ, рдмрдбрд╝реА рдФрд░ рдЫреЛрдЯреАред
рдЫреЛрдЯрд╛: рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд▓реЗрдирджреЗрди рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ? рдмрд╕рдВрдд рдпрд╛ рджрд╛рд▓реЛрдВ рд╕реЗ рдореБрдЭреЗ рдорд┐рд▓реЗ рдХреБрдЫ рднреА рдирд╣реАрдВред рдпрд╣ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рдЦреЛрд▓рдиреЗ рдФрд░ рд▓реЗрди-рджреЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред рдЕрдкрд░рд┐рдореЗрдп рдФрд░ рдЕрдкрд░рд┐рдкрдХреНрд╡ред
рдмрдбрд╝рд╛ рдПрдХ: рдЗрд╕ рддрдереНрдп рдХреЗ рдмреАрдЪ рд╕рдВрдШрд░реНрд╖ рдХрд┐ рдореБрдЦреНрдп рдЖрдзрд╛рд░ MySql рд╣реИ, рдФрд░ рдЗрди-рдореЗрдореЛрд░реА H2 рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдПред рдЗрд╕рд▓рд┐рдП, H2 MySql рдХреЗ рд▓рд┐рдП рдЕрдкрд╡рд┐рдХрд╛рд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдордЭрдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдЧреИрд░-рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ:
start(fakeApplication(inMemoryDatabase("login-test")));
рдпрджрд┐ рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛
save()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдбреЗрдЯрд╛ рдХреА рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЛ
save()
рд╣реИ, рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛ рдЕрднреА рднреА рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдХреБрдЫ рдЕрд╕реНрдкрд╖реНрдЯ рд╡рд┐рд╡рд░рдг рджреЗрдЦреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рджрдЧреА рд╡рд╣рд╛рдБ рдЧрдВрдз рдирд╣реАрдВ рдХрд░рддреА рд╣реИред
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдХрд╛рдо рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╣рддреЗ рд╣реИрдВред
рдЕрдЪреНрдЫреЗ рдХрд╛ред рдЙрдкрдпреЛрдЧреА рдХрдорд╛рдВрдб рд╣реИрдВ
~test
рдпрд╛
~test-only
рдЬреЛ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдордп рдмрдЪрд╛рддрд╛ рд╣реИред
рд╕реБрд░рдХреНрд╖рд╛
рд░рд╛рдЬреНрдп рдХреЗ рдлреЛрд░реНрдЬ рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╡рдЪ рд╣реЛрддреЗ рд╣реИрдВред рд╢рд┐рд▓реНрдкрдХрд╛рд░ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдЪреАрдЬреЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВредрдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреНрд╖рдорддрд╛рдПрдВ рдкреНрд▓реЗ 1.2.x рдкрд░ рдмрдиреА рд░рд╣реАрдВред
@With
рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ
рдПрдХреНрд╢рди @With
,
Security.Authenticator
рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдкреЗрдЬ рдХреЛ
рдЬреЛрдбрд╝рдирд╛ ,
@With
рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред
рддреГрддреАрдп-рдкрдХреНрд╖ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдбреЗрдбрдмреЛрд▓реНрдЯ рдпрд╛
рд╕рд┐рдХреНрдпреЛрд░рд╕реЛрд╢рд▓ , рд▓реЗрдХрд┐рди рд╡реЗ рдПрдХ рдЫреЛрдЯреА рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрд╕рдХрд░ рд▓рдЧ рд░рд╣реЗ рдереЗ, рдФрд░ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╣рд╕реНрддрд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ред
рд╡реИрд╕реЗ, рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд▓реЗ 2.
0 рдиреЗ рдСрдереЗрдВрдЯрд┐рд╕рд┐рдЯреА рдЯреЛрдХрди рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рдЦреЛ рджреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ
рддреГрддреАрдп-рдкрдХреНрд╖ рдкреНрд▓рдЧрдЗрди рд╣реИ рдЬреЛ рдЦреЛрдИ рд╣реБрдИ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреНрд▓реЗ 2.1 рдореЗрдВ рдХреБрдЫ
filters
рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗ, рдЬрд┐рдирдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╕рдВрд╕реНрдХрд░рдг 2.1 рдХреЗ рдкреНрд░реЗрд╕ рд╡рд┐рдЬреНрдЮрдкреНрддрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдкреНрд░рд▓реЗрдЦрди рд╣реИред рд╕рд┐рд░реНрдл
CSRFFilter
рдЙрд▓реНрд▓реЗрдЦрд┐рдд
CSRFFilter
ред рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдпрд╣
рдкреЛрд╕реНрдЯ рдереА рдЬреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рд╕реАрдПрд╕рдЖрд░рдПрдл рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рдХреНрдпрд╛ рдпрд╣ рд╕рднреА 2.1 рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ + рдЬрд╛рд╡рд╛ рдХреЛ рдЕрднреА рднреА рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрд╕реНрдерд┐рд░рддрд╛
рдХрднреА-рдХрднреА рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдорд┐рд░рдЬрд╝реЗ рдЖ рдЬрд╛рддреЗ рдереЗред рдкрд╛рд╕ рдЖрддреЗ рд╣реА рд╡реЗ рдЧрд╛рдпрдм рд╣реЛ рдЧрдПред рдирдХреНрд╢реЛрдВ рдкрд░ рдХреЛрдИ рдореГрдЧрддреГрд╖реНрдгрд╛ рдирд╣реАрдВ рдереАредрдХрдИ рдмрд╛рд░, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдиреЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛! рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рд╕рдВрдХрд▓рди / рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдмрд╕рдиреЗ рдХреА рдкреАрдврд╝реА рд╣рдореЗрд╢рд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ
play clean
рдФрд░ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреАред
рдЬреЛ рд╕рдмрд╕реЗ рдЕрдЬреАрдм рдмрд╛рдд рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓реА рд╡рд╣ рдпрд╣ рдереА рдХрд┐
JDK 7
рд▓рд┐рдП рдорд╛рдиреНрдп рдХреЛрдб рдкреНрд░рдХрд╛рд░
JDK 7
:
catch (IndexOutOfBoundsException | ArrayStoreException e)
рд▓рд╛рдпрд╛ 2.1 рдкреВрд░реНрдг рдмреЗрд╡рдХреВрдл рдХреЗ рд▓рд┐рдП: рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ, рдХреЛрдИ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ, рдмрд╕ рд╕рд░реНрд╡рд░ рдЗрди рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдЬрдорд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЖрдЧреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдПрдХ рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛
рдЧрдпрд╛ , рдЬрд╡рд╛рдм рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛ред
рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕
рдРрд╕реЗ рджрд▓рджрд▓ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЗ рд╕рд╛рде рдЪреВрд╕ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╡реЗ рдирд╣реАрдВ рдЪреВрд╕ рд╕рдХрддреЗ рд╣реИрдВредрдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдкреНрд░рднрд╛рд╡реА рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕реНрдХрд╛рд▓рд╛ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛, рдпрд╣ рд╕рдм рдХреЛрдб рдХреА рдПрдХ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдХреА рдЪрд╛рд▓ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
@main(title = "Home") { <h1>Home page</h1> }
рдФрд░ рдЗрд╕рд▓рд┐рдП рдирдИ рд▓рд╛рдЗрди рдкрд░
{
рдХрд╛рд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА:
@main(title = "Home") { <h1>Home page</h1> }
рдпрд╛ рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг:
рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдкреНрд▓реЗ 2.0 рдореЗрдВ рд╕реНрдХрд╛рд▓рд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рд╛, рддреЛ рдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реБрдИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ .Net рд╕реЗ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реЗрдЬрд░ рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рд╡рд╛ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХрдИ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдЖрдкрдХреЛ рд╕рднреА рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдХреЛрдб рдореЗрдВ рдПрдХ
fullName
рд╡реИрд░рд┐рдПрдмрд▓ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рд╕реЗ
fullName
рдЬрд╛ рд╕рдХрддрд╛
fullName
:
@defining(user.getFirstName() + " " + user.getLastName()) { fullName => <div>Hello @fullName</div> }
рдФрд░ рдЖрдкрдХреЛ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
@import helper._
ред рдФрд░ рднреА рдмрд╣реБрдд рд╕реЗ "рдЗрдлрд╝реНрд╕" рдФрд░ "рдмрдЯреНрд╕", рдЬрд┐рдирдХреЗ рднреАрддрд░ рдЖрдк рдмрд╣реБрдд рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдореБрдЦреНрдп рдкреНрд▓рд╕ рд╕реНрдХрд╛рд▓рд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рдВрдХрд▓рд┐рдд рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрдирдЪрд╛рд╣реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЖрдХреНрд░рд╛рдордХ рдЯрд╛рдЗрдкреЛ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЪрд╛рд╣реЗ рдкреНрд▓реЗ 2.1 рдореЗрдВ рд╕реНрдХреЗрд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЕрдЪреНрдЫрд╛ рд╣реИ рдпрд╛ рдмреБрд░рд╛, рдПрдХ рдореНрдпреВрдЯ рдкреЙрдЗрдВрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рд░рд┐рдХреНрд░рд┐рдПрдЯ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ MVC рдлреНрд░реЗрдорд╡рд░реНрдХ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
JSON рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рддрдм рдмрд╣рд╛рджреБрд░ рдпреЛрджреНрдзрд╛ рдЖрдо рддреМрд░ рдкрд░ рдкрд░реЗрд╢рд╛рди рдерд╛ рдФрд░ рдПрдХ рд╕рд░рд╛рдп рдореЗрдВ рдкреАрдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдпрд╛ рдерд╛редрдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдкреНрд▓реЗ 2.1. рдкреНрд▓реЗ 1.2.x рдкрд░ рдереЛрдбрд╝рд╛ рдЦреЛ рджреЗрддрд╛ рд╣реИред рдореБрдЦреНрдп рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ Gson рдХреЗ рдмрдЬрд╛рдп, рдЬреИрдХреНрд╕рди рдЬрд╛рд╡рд╛ рдореЗрдВ JSON рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдкреНрд▓реЗ 1.2.x рдореЗрдВ GSON рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрд╕рдВрдж рдерд╛, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд▓рдЪреАрд▓рд╛ рдерд╛ред рдЬреИрдХреНрд╕рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдореИрдВ рдЕрднреА рддрдХ рдЬреИрдХреНрд╕рди рдХреА рд╕рдордЭ рдХреЗ рдЙрд╕ рд╕реНрддрд░ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдкрд╛рдпрд╛ рд╣реВрдВ рдХрд┐ рдЙрд╕рдХрд╛ рдЖрдирдВрдж рд▓реЗ рд╕рдХреВрдВред рдФрд░ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ JSON рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдХреЛ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдгреЛрдВ рд╕реЗ рдмрдЪ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд╕реЗ рдореБрдЭреЗ рднрд╛рд░реА рдЖрдШрд╛рдд рд▓рдЧрд╛:
return ok(Json.parse("{\"status\": \"success\"}"));
рд▓рдЧрднрдЧ рдХреЛрдИ рдкрдардиреАрдпрддрд╛ рдирд╣реАрдВ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдЧреНрд░реЗрдиреНрд╕ рдореЗрдВ JSON рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ:
render([result: 'fail'] as JSON)
рдмреЗрд╢рдХ, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдЖрдк рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
ObjectNode result = Json.newObject(); ArrayNode arrayNode = result.putArray("photos"); for (Photo photo : photos) { ObjectNode photoAsJson = arrayNode.addObject(); photoAsJson.put("id", photo.id); photoAsJson.put("guid", photo.guid); } return ok(arrayNode);
рдХрд╛рдлреА рд╕рд╣рди рдХрд░рдиреЗ рдпреЛрдЧреНрдпред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реНрдХрд╛рд▓рд╛ рдХреЗ рд▓рд┐рдП, рдкреНрд▓реЗ 2.1 рдореЗрдВ JSON рд╕рдорд░реНрдерди рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
Json.obj( "users" -> Json.arr( Json.obj( "name" -> "bob", "age" -> 31, "email" -> "bob@gmail.com" ), Json.obj( "name" -> "kiki", "age" -> 25, "email" -> JsNull ) ) )
рд▓реЗрдХрд┐рди рдЧреНрд░реВрд╡реА рдореЗрдВ, рдпрд╣ рдЕрднреА рднреА рдЫреЛрдЯрд╛ рдФрд░ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИред рдпрд╣ рдЖрд╢рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╕реНрдХрд╛рд▓рд╛ рдЕрднреА рднреА рдореВрд▓ JSON рд╕рдорд░реНрдерди рдХреЛ рдЬреЛрдбрд╝реЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдм XML рдХреЗ рд▓рд┐рдП рд╣реИред
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдореИрдВрдиреЗ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛: рдПрдХ
Pair
,
Tuple2
рд╕реЗ
Tuple2
рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ, рджреВрд╕рд░рд╛ рд╡рд╣ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ
Map
рдореЗрдВ
Pair
рд░рдЦрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛:
return ok(toJson(map( pair("status", "fb-logged-in"), pair("user", map( pair("id", fbUser.id), pair("facebookUserId", fbUser.facebookUser.userId), pair("fullName", fbUser.fullName()) )) )));
рдЬрдм рд╕реЗ рд╣рдо рдЯреНрдпреВрдкрд▓реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддрдм рдкреНрд▓реЗ 2.1 рдореЗрдВ рдЬрд╛рд╡рд╛ рдлрдВрдХреНрд╢рдирд▓ рдХреЗ рд▓рд┐рдП рд╕рдкреЛрд░реНрдЯ рдХреЛ рдкреНрд▓реЗ 1.2.x рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА
play.libs.F
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдХреЛрдИ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ
рдкреНрд▓реЗ 1.2.x рдХреЗ рд▓рд┐рдП рдбреЙрдХ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдФрд░ рдПрдХ рдФрд░ рдмрд╛рдд: XML рд╕рдорд░реНрдерди рднреА рдкреНрд▓реЗ 1.2.x рд╕реЗ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ XML рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
play.libs.XPath
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдореЗрд▓ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ
рд╡рд╛рд╣рдХ рдХрдмреВрддрд░ рдФрд░ рдХреМрд╡реЗ рд╕рднреА рдпрд╣рд╛рдВ рдЖрдпрд╛рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдРрд╕реА рдЕрдлрд╡рд╛рд╣реЗрдВ рд╣реИрдВ рдХрд┐ рдкреНрд▓реЗрдЯрд░реЗ II рдХреЗ рд╢рд╛рд╕рдХреЛрдВ рдиреЗ рд╕рднреА рдкрдХреНрд╖рд┐рдпреЛрдВ рдХреЛ рдЦреБрдж рдХреЛ рдЧреЛрд▓реА рдорд╛рд░ рд▓реАредрдореИрдВ рдореЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд▓реЗ 1.2.x рдореЗрдВ рдореЗрд▓ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рдерд╛, рд▓реЗрдХрд┐рди рдкреНрд▓реЗ 2.1 рдореЗрдВ рдирд╣реАрдВред
рдореЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ
рдкреНрд▓рдЧрдЗрди рд╣реИ ред рдпрд╣рд╛рдБ
рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдиреЗ рд╕реНрд╡рдпрдВ рдореЗрд▓ рд╕рдорд░реНрдерди рди рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдХрдерд┐рдд рддреМрд░ рдкрд░, рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдФрд░ рд╕рд░рд▓ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реИред Google рд╕рдореВрд╣ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рд╢реНрди рдФрд░ рдЖрдХреНрд░реЛрд╢ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЦрдВрдбрди рдХрд░рддреЗ рд╣реИрдВ: рд▓реЛрдЧ рдкреНрд▓реЗ 2.1 рд╕реЗ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд▓реЗ 1.2.x рдореЗрдВ рдЗрд╕рд╕реЗ рдХрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИред
рд╡рд┐рдиреНрдпрд╛рд╕
рдпрджрд┐ рдкрд╣рд▓реЗ рдЕрдиреБрдмрдВрдз рд╕реНрдХреНрд░реЙрд▓ рдкрд░ рд▓рд┐рдЦреЗ рдЧрдП рдереЗ, рддреЛ рдЕрдм рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрддреНрддрд┐рдпреЛрдВ рдкрд░редрдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ
framework ID
рд╣рдЯрд╛ рджрд┐рдпрд╛ред рдЕрдм, рдПрдХ рдмрдбрд╝реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдмрд┐рдВрджреБ, рдкреНрд░рддреНрдпреЗрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖ рд╣реИрдВред рдпрджрд┐
production
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдерд╛:
play run --%production
рдЕрдм рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
play -Dconfig.resource=prod.conf start
рдФрд░
prod.conf
рдореЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдУрд╡рд░рд░рд╛рдЗрдб рд╣реЛрддреА рд╣реИрдВред
рдЖрдИрдбреАрдИ рдПрдХреАрдХрд░рдг
рдореЗрд░реЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдШреЛрдбрд╝реЗ рдиреЗ рд╕реНрдерд╛рдиреАрдп рд╕рдбрд╝рдХреЛрдВ рдкрд░ рдЕрдкрдирд╛ рдкреИрд░ рдЬрдорд╛рдпрд╛!рдореИрдВрдиреЗ рдЖрдкрдХреЛ рд╕рднреА рдЖрдИрдбреАрдИ рдХреЗ
рд▓рд┐рдП рд╕рднреА рдУрдбреЗрд╕рд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░реА рдкреНрдпрд╛рд░реА рдЗрдВрдЯреЗрд▓реАрдЬ рдЖрдЗрдбрд┐рдпрд╛ рдХреЛ рдкреНрд▓реЗ 2.x рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╕реЗ рд╕рдорд░реНрдерди рдорд┐рд▓рд╛ рд╣реИред рдХреЛрдб рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╣реБрдд рдмрд╛рд░ рдЙрддреНрдкрдиреНрди рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХрднреА-рдХрднреА рд╕реНрдХреЗрд▓рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рдкреВрд░реНрдг рдПрд╕рдмреАрдЯреА рд╕рдорд░реНрдерди рдХреЗрд╡рд▓ рд╕рдВрд╕реНрдХрд░рдг 13 рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдБ рд╕рд┐рд░реНрдл рд╡рд╣реА рд╣реИрдВ рдЬреЛ рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ рдкрд╛рдпрд╛ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛:
youtrack.jetbrains.com/issues/SCL?q=reported+by%3A+Andrey.Volkov+рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕реБрдЦ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд▓реЗ 2.x рдХреЛ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЖрдИрдбреАрдИ рдореЗрдВ рдЗрд╕рдХреЗ рд╕рдорд░реНрдерди рдкрд░ рдмрдбрд╝реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦрд░реНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддрдирд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдмрд╕ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЖрдИрдбреАрдИ рд╕реЗ рдмрд╣реБрдд рдорджрдж рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдкреНрд▓реЗ 1.2.x рдХреЗ рд╕рд╛рде, рдпрд╣ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИред
рд╕рд░рд▓рддрд╛ рдЪрд▓реА рдЧрдИ
рдпрджрд┐ Playterre I рдХрд╛ рджреЗрд╢ рдЪрдорддреНрдХрд╛рд░реЛрдВ рд╕реЗ рднрд░рд╛ рдерд╛ рдФрд░ рдЬрд╛рджреВ рдХреА рдЫрдбрд╝реА рдХреА рд▓рд╣рд░ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдХреБрдЫ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ Playterra II рдореЗрдВ рдХреЛрдИ рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рдлрд╛рд╡рдбрд╝рд╛ рдФрд░ рдПрдХ рдХреБрджрд╛рд▓, рдПрдХ рдврд╛рд▓ рдФрд░ рдПрдХ рддрд▓рд╡рд╛рд░ рд╣реИредрдкреНрд▓реЗ 1.2.x рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛ред рдмрд╣реБрдд рдХреБрдЫ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╣рд╛рдВ, рдореИрдВрдиреЗ рд░рд╛рдп рд╕реБрдиреА рдХрд┐ рдкреНрд▓реЗ 1.2.x рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╣реБрдЖ рдерд╛, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рдерд╛ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рд╡рд╛ рджреБрдирд┐рдпрд╛ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╕, рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╕рднреА рдЬрдЯрд┐рд▓рддрд╛рдПрдВ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдЫрд┐рдкреА рд╣реБрдИ рдереАрдВ, рдФрд░ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЬрдЯрд┐рд▓ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдЦреЛрджрдирд╛ рдерд╛ред
рдкреНрд▓реЗ 2.1 рдореЗрдВ, рд▓рдЧрднрдЧ рд╕рднреА "рдЬрд╛рджреВ" рдХреЛ рд╕реНрдХрд╛рд▓рд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдпрд╣ рдЕрдм рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕реНрдХрд╛рд▓рд╛ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдп рд╣реИред рдЬрд┐рд╕ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдареЛрдХрд░ рдЦрд╛рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реНрдХрд╛рд▓рд╛ рдХреА рдореВрд▓ рдмрд╛рддреЛрдВ рдХреЗ рдЬреНрдЮрд╛рди рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдордЬрд╝реЗ рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
public static void index() { render() }
рдФрд░
public static Result login() { return ok( login.render() ); }
рдХреЛрдб рдХрд╛ рдкрд╣рд▓рд╛ рдЯреБрдХрдбрд╝рд╛ рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдХреБрдЫ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЛ рдЬрд╛рдирдиреЗ рдФрд░ рдЙрдирдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдХреЛрдб рдХрд╛ рджреВрд╕рд░рд╛ рдЯреБрдХрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдХреБрдЫ рдЬрд╛рдирдиреЗ рдФрд░ рдХреБрдЫ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд░рд▓ рдирд╣реАрдВред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред
рд╡реИрд╕реЗ, рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐
login
рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ? рдпрд╣ рд╕реНрдХреИрд▓рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдЙрддреНрдкрдиреНрди рдПрдХ рд╡рд░реНрдЧ рд╣реИред рдЬреЛ рдЗрд╕ рдмрд╣реБрдд рд╣реА рд╕реНрдХреИрд▓рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж рд╣реА рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдпрд╛рдиреА рдЖрдИрдбреАрдИ рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдРрд╕рд╛ рдХреЛрдИ рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдпрджрд┐ рдЖрдк рдХреБрдЫ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВред рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж, рд╢рд┐рдХрд╛рдпрддреЗрдВ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдИрдбреАрдИ рдХреЗ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
Playterre рдПрдХ рдкреНрд░рдХрд╛рд╢-рдкрдВрдЦреЛрдВ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдВ рдФрд░ рдЕрдЪреНрдЫреА рдЖрддреНрдорд╛рдУрдВ рд╕реЗ рднрд░рд╛ рдерд╛ред Playterra II рдореЗрдВ рдХреЗрд╡рд▓ рдпрд╛рдВрддреНрд░рд┐рдХ рдЧреЛрд▓реЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдЧрд┐рдпрд░ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВредрдирд┐рд░реНрд╡рд┐рд╡рд╛рдж рд▓рд╛рдн
рдХрдИ рд╡рд┐рд╖рдорддрд╛рдУрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрджрд┐ рджреЛрд╖реЛрдВ рдХреЛ рдирд╣реАрдВ рдХрд╣рдирд╛ рд╣реИ, рддреЛ рдкреНрд▓реЗ 2.1 рдореЗрдВ рдХрдИ рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж рдлрд╛рдпрджреЗ рд╣реИрдВред
рдкреНрд░рдкрддреНрд░ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдмрд╣реБрдд рд╕рд╣рдЬ рд╣реИред JSR-303 (рдмреАрди рд╡реИрд▓рд┐рдбреЗрд╢рди) рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛
validate
рддрд░реАрдХрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред рдореИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ
рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП,
input
рдлрд╝реАрд▓реНрдб рдХреА рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреАрдврд╝реА рд╣реИ, рдФрд░ рдЖрдк рддреБрд░рдВрдд рдЯреНрд╡рд┐рдЯрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдХрдЕрдк рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рджрдпрд╛ рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 1.4 рдХреЗ рд▓рд┐рдПред рдЖрдкрдХреЛ рдПрдХ рдХрд╕реНрдЯрдо рдЬрдирд░реЗрдЯрд░ (
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдлрд╝реАрд▓реНрдб рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рд▓рд┐рдЦрдирд╛ рдЕрдиреБрднрд╛рдЧ)
рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ ред
рдпрджрд┐ рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛ рдЯреЛрдХрди рдХреЛ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЯреНрд╡рд┐рдЯрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк 2.3 рдлрд╝реАрд▓реНрдб рдЙрддреНрдкрдиреНрди рдХрд┐рдП рдЧрдП рдереЗ, рддреЛ рдпрд╣ рд▓рдЧрднрдЧ рдЖрджрд░реНрд╢ рд╣реЛрдЧрд╛ред
рдЕрдХреНрдХрд╛ рдФрд░ рдЕрдиреНрдп рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЪреАрдЬреЗрдВ
рд╕реНрдерд╛рдиреАрдп рд╕рд░рд╛рдп рдФрд░ рд╕рд░рд╛рдп рдмрд╣реБрдд рддреЗрдЬ рд╕реЗрд╡рд╛ рд╣реИред рдФрд░ рдХрднреА рдХрддрд╛рд░ рдирд╣реАрдВ рд╣реИрдВредрдорд▓реНрдЯреАрд╕реНрдЯреНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рд╕рдорд░реНрдерди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдШреЛрдбреЗ рдкрд░ 2.1 рдЦреЗрд▓реЛред
рдЕрдХрд╛рд╕ рдХреЗ рд╕рд╛рде рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░
рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдореВрд▓
рд╕рдорд░реНрдерди рд╣реИ ред рдпрджрд┐ рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ...
рдмрд╕ рддреБрд▓рдирд╛ рдХреАрдЬрд┐рдПред рдЬрд╛рд╡рд╛:
public static Result index() { Promise<Integer> promiseOfInt = play.libs.Akka.future( new Callable<Integer>() { public Integer call() { return intensiveComputation(); } } ); return async( promiseOfInt.map( new Function<Integer,Result>() { public Result apply(Integer i) { return ok("Got result: " + i); } } ) ); }
рд╕реНрдХреЗрд▓рд╛:
def index = Action { val futureInt = scala.concurrent.Future { intensiveComputation() } Async { futureInt.map(i => Ok("Got result: " + i)) } }
рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдХрд╛рд░рдгред рдпрд╛ рдХреБрдЫ рдФрд░, рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ "рдХрд╛рд░реНрдпрд╛рддреНрдордХ"ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░рддрд┐рдпреЛрдЧреА рд╕реЛ рдирд╣реАрдВ рд░рд╣реЗ рд╣реИрдВ: рдЧреНрд░рд┐рд▓реНрд╕ 2.3 рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ (
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдмреНрд▓реЙрдЧ рдкрд░ рдкреЛрд╕реНрдЯ ) рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕рдорд░реНрдерди рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдЧреНрд░реВрд╡реА рдкрд░ рдЬрд╛рд╡рд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ: рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдПрдХ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред
рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдФрд░ рдмрд╛рджрд▓
рдпрд╣рд╛рдВ рдХреА рднреВрдорд┐ рдЙрдкрдЬрд╛рдК рд╣реИ рдФрд░ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдЖрдмрд╛рджреА рдХреЛ рдЦрд┐рд▓рд╛ рд╕рдХрддреА рд╣реИред рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░ рдФрд░ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рджрд▓ рдЖрдХрд╛рд╢ рдореЗрдВ рддреИрд░рддреЗ рдФрд░ рддреИрд░рддреЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВредрдпрд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдг, 2.1 рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЦреЗрд▓рддреЗ рд╣реИрдВред рдЕрдм рддрдХ, рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдРрд╕реА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдврд╝реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рд╕реЗ рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рд╣рд╛рдВ, рдФрд░ рдкреНрд▓реЗ 2.x рдХрдИ рдХреНрд▓рд╛рдЙрдб рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕рд╛рдЗрдЯреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореВрд▓ рд╕рдорд░реНрдерди, рдЕрд░реНрдерд╛рддреНред рдпреБрджреНрдз рдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдФрд░ рдЯреЙрдордХреИрдЯ / рдЬреЗрдЯреНрдЯреА рдХреЗ рддрд╣рдд рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЛ рдЕрднреА рднреА рдпреБрджреНрдз-рдлрд╝рд╛рдЗрд▓ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓
рддреГрддреАрдп-рдкрдХреНрд╖ рдкреНрд▓рдЧ-рдЗрди рдХреА рдорджрдж рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдХрдо рд╕рдорд░реНрдерди
рдЫреЛрдЯреЗ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЛ рдпрд╣рд╛рдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЕрдм рд╡реЗ рд▓реЛрдЧреЛрдВ рдХреА рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд╕реЗрд╡рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВредCoffeeScript рдФрд░ рдХрдо рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╕рдорд░реНрдердиред рдореБрдЭреЗ рдпрд╣ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЬреЛрдбрд╝рд╛ рдпрд╛ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХред рдпрд╣ рд╕рд╣реА рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдм рдХреБрдЫ рдЫреЛрдЯрд╛ рднреА рд╕рд░рд▓ рд╣реИ: рдмрд╕
.js
рдмрдЬрд╛рдп
.min.js
рд▓реЛрдб рдХрд░реЗрдВред
рдЗрд╕рд╕реЗ рдЕрднреА рддрдХ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред
рдХрдВрд╕реЛрд▓
Playterra II рдХреЗ рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рдкрд░ рд╕реАрдорд╛ рд╢реБрд▓реНрдХ рдиреЗ рдирдП рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рдХрд╛рдо рдкрд░ рд░рдЦрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рдХрд┐рд╕реА рдХреЛ рднреА рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реИ рдЙрдиреНрд╣реЗрдВ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рдиреЗ рджреЗрдВ, рдлрд┐рд░ рдХреЛрдИ рдЙрди рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдЧрд╛редрдХрдВрд╕реЛрд▓ рдкреНрд▓реЗ 1.2.x рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реЛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд▓реЗ 2.1 рд╕реЗ рдПрд╕рдмреАрдЯреА (рд╕реНрдХрд╛рд▓рд╛ рдмрд┐рд▓реНрдб рдЯреВрд▓) рдХреЗ рдХреНрд░реЗрдбрд┐рдЯ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╣реИред
рдЬреЛ рдХрд╛рдо рдЖрдпрд╛, рдЙрд╕рд╕реЗ рдореИрдВ
~
рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХрдорд╛рдВрдбреНрд╕ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рд╣рд░ рдмрд╛рд░ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг
~test
рдореИрдВ рдКрдкрд░ рдЙрджреНрдзреГрддред
рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реИ?
Playterra II рдореЗрдВ рдЫреБрдЯреНрдЯреА рдкрд░ рдЬрд╛рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдкреНрд░рд╡рд╛рд╕рди рдХрд╛ рдореБрджреНрджрд╛ рдЕрднреА рднреА рдХрд╛рдлреА рдЦреБрд▓рд╛ рд╣реИредрдЕрдкрдиреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖ рджрд┐рдП:
- рдкреНрд▓реЗ 2.1 рдХреЛ рдЗрд╕рдХреА рдкреВрд░реА рдХреНрд╖рдорддрд╛ рддрдХ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдХрд╛рд▓рд╛ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред
- рдЬрд╛рд╡рд╛ рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдкреНрд▓реЗ 1.2.x рд▓реЗрдВред рдпрд╛ рджрд╛рдиреЗред рдЧреНрд░реВрд╡реА рдХреЛ рд╕реНрдХрд╛рд▓рд╛ рдХреЛ рд╕рдордЭрдирд╛ рдЙрддрдирд╛ рдХрдард┐рди рдирд╣реАрдВ рд╣реИред
- рд╣рдореЗрдВ рд╕реНрдХрд╛рд▓рд╛ рд╕реАрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╡рд╛ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЧреНрд░реВрд╡реА рд╕реЗ рдорддрднреЗрдж рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред
- рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдкреАрдЫреЗ рдЬрд╛рд╡рд╛ рд▓рдЧрднрдЧ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреЗрд╡рд▓ рд▓реЗрдЦрди рдХреЛрдб рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╢рд╛рдпрдж рдЬрд╛рд╡рд╛ 8 рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред
[рез] - рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛ рдкреНрд▓реЗ реи.рез рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдпрд╣
рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ ред рдпрд╛рдиреА рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬреЗрдкреАрдП рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рд╕реЗ рдЕрдиреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд▓реЗрдЦ рдирд╣реАрдВ рдорд┐рд▓реЗ рд╣реИрдВред рдЙрд╕рдХреЗ рд╣рд╛рде рдпрд╛ рддреЛ рдирд╣реАрдВ рдкрд╣реБрдБрдЪреЗред
[реи] - рд▓реЗрдЦ рдХреА рддреИрдпрд╛рд░реА рдХреЗ рджреМрд░рд╛рди, рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ JSON рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП Java API рдХреЛ EE 7 рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдУрд░реЗрдХрд▓ рдмреНрд▓реЙрдЧ рдкрд░ рдЗрд╕
рдкреЛрд╕реНрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдЧреНрд░реВрд╡реА рдХреЗ JSON рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдмрдВрдж рдХрд░реЗрдВред рдХреЗрд╡рд▓ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдпрд╣ред