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

рд╕реНрдкреНрд░рд┐рдВрдЧ рд░реАрд╕реНрдЯ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдХрд╛ рдЬреНрдпрд╛рджрд╛рддрд░ рдЙрдкрдпреЛрдЧ рд░реАрд╕реНрдЯ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдореЗрдВ рдЕрдзрд┐рдХ рдЧрд╣рд░рд╛рдИ рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝реЗрдВред
REST рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛?REST рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдкреНрд░рддрд┐рдирд┐рдзрд┐ - REST рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - JSON, XML, рдкрд╛рда рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ HTML - рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдбреЗрдЯрд╛ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ
- рд░рд╛рдЬреНрдп - рдЖрд░рдИрдПрд╕рдЯреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╕рдВрд╕рд╛рдзрди рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╕рд╛рде рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░
- рдЯреНрд░рд╛рдВрд╕рдлрд░ - REST рдореЗрдВ рдПрдХ рдЖрд╡реЗрджрди рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдбреЗрдЯрд╛ рдХрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИред
REST рдПрдХ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмреАрдЪ рд╕рдВрд╕рд╛рдзрди рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╣реИред
рдПрдХ рд╕рдВрд╕рд╛рдзрди рдХреНрдпрд╛ рд╣реИ?REST рдореЗрдВ рдПрдХ рд╕рдВрд╕рд╛рдзрди рд╡рд╣ рд╕рдм рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ:
- рд╕рдорд╛рдЪрд╛рд░
- рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдореЗрдВ рд╕реЛрдорд╡рд╛рд░ рдХреЛ рд╕реБрдмрд╣ 4 рдмрдЬреЗ рддрд╛рдкрдорд╛рдиред
- рдХрд░реНрдордЪрд╛рд░реА рдХрд╛ рд╡реЗрддрди
- рдбреЗрдЯрд╛рдмреЗрд╕ рдЪрдпрди
- рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо
CRUD рдХреНрдпрд╛ рд╣реИ?REST рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдПрдБ http рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред
, Post
, Put
, Delete
, Patch
, рдФрд░ рдЕрдиреНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рд╕рдВрдХреНрд╖рд┐рдкреНрдд CRUD рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
- рдмрдирд╛рдПрдБ -
POST
GET
- рдЕрджреНрдпрддрди -
PUT
- рд╣рдЯрд╛рдПрдВ -
DELETE
рдХреНрдпрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ? рдЖрдк рдЙрд╕рдХреА рд░рдХреНрд╖рд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, REST рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред
рдЖрдк рдмреЗрд╕рд┐рдХ рдСрде, JWT, OAuth2 рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
ред
рд╕реЗрд╡ рдСрдкрд░реЗрд╢рди рдХреНрдпрд╛ рд╣реИ?рдпреЗ рдРрд╕реЗ рдСрдкрд░реЗрд╢рди рд╣реИрдВ рдЬреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЙрдирдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ:
- рдкреНрд░рд╛рдкреНрдд
- HEAD
- рд╡рд┐рдХрд▓реНрдк
рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдСрдкрд░реЗрд╢рди рдХреНрдпрд╛ рд╣реИ? рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдмреЗрд░реЛрдЬрдЧрд╛рд░реА?рдмреЗрд░реЛрдЬрдЧрд╛рд░реА рд╡рд┐рдзрд┐рдпрд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдЖрд╣реНрд╡рд╛рди рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реЛрдЧрд╛ред
рдЕрд░реНрдерд╛рддреН, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ 1 рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ 10 рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред
рдпрд╣ рдПрдХ рдЧрд▓рдд рд╕рд╣рд┐рд╖реНрдгреБ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХреЛрдИ рдЧреНрд░рд╛рд╣рдХ POST рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рд╕рдВрд╕рд╛рдзрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ? рдпрджрд┐ POST рдПрдХ рдмреЗрдХрд╛рд░ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рдорд▓реНрдЯреАрдкрд▓ рдХреЙрд▓ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕рдВрд╕рд╛рдзрди рдЕрдкрдбреЗрдЯ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред рдмреЗрдХрд╛рд░ рддрд░реАрдХреЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЦреБрдж рдХреЛ рдХрдИ рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛рддреЗ рд╣реИрдВред
REST рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╣реИ?рд╣рд╛рдВред REST рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░рд╛рдЬреНрдп рдХреЛ рд╕реНрдЯреЛрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рд╕рд░реНрд╡рд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдирд╣реАрдВ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╣рд░ рдмрд╛рд░ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдПрд╕рдЯреА рдХрд╛ рдорддрд▓рдм REST, рд╕реНрдЯреЗрдЯ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдореЗрдВ рд╣реИред рдЖрдк рд░рд╛рдЬреНрдп рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
REST рднреА рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд▓ рд╣реИ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрд╕ рдкрд░ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ 2 рдХрд╛рд░рдХреЛрдВ рд╕реЗ рдЖрддрд╛ рд╣реИ:
- Interoperable HTTP рдХреНрд▓рд╛рдЗрдВрдЯред рд╡рд┐рднрд┐рдиреНрди рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ рд╣реА http рдЕрдиреБрд░реЛрдз рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдореАрдбрд┐рдпрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕реНрддрд░ рдкрд░ рдЕрдВрддрд░ред рд╡рд┐рднрд┐рдиреНрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕рдорд╛рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рднреЗрдЬрдирд╛ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
HttpMessageConverter рдХреНрдпрд╛ рд╣реИ?HttpMessageConverter
рдЕрдиреБрд░реЛрдз рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред
рд╡рд╕рдВрдд рдореЗрдВ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ, рдФрд░ рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, DispatcherServlet
рдореЙрдбрд▓ рдФрд░ рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
REST рдореЗрдВ, рдореЙрдбрд▓ рдФрд░ рджреГрд╢реНрдп рдмрд┐рд▓реНрдХреБрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВред рдирд┐рдпрдВрддреНрд░рдХ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдФрд░ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗрд╡рд▓ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╕рдВрджреЗрд╢ рдПрдХ рдореАрдбрд┐рдпрд╛ рдкреНрд░рдХрд╛рд░ (json, xml ...) рд╕реЗ рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдХрдирд╡рд░реНрдЯрд░ рд╕реВрдЪреА:
BufferedImageHttpMessageConverter
- рдЫрд╡рд┐ рдХреЛрдб рдХреЗ рд▓рд┐рдП (рд╕реЗ) рдПрдХ BufferedImage
рдЧрдП BufferedImage
рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИред
Jaxb2RootElementHttpMessageConverter
- jaxb2 рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ xml рд╕реЗ (рд╕реЗ) рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ jaxb2 classpath рдореЗрдВ рд╣реИ рддреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВред
MappingJackson2HttpMessageConverter
- JSON рдХреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ (рд╕реЗ) рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ рдЕрдЧрд░ рдЬреИрдХреНрд╕рди 2 рдХреНрд▓рд╛рд╕рдкрд╛рде рдореЗрдВ рд╣реИред
StringHttpMessageConverter
- рд╕рднреА рдореАрдбрд┐рдпрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд╛рда / рд╕рд╛рджреЗ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИред
@RestController рдПрдиреЛрдЯреЗрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?@RestController
рдХреЛ @RestController
рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдмрдЬрд╛рдп рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╣ рдмрддрд╛рддреА рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рдореЙрдбрд▓ рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдбреЗрдЯрд╛ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ @Controller
рдФрд░ @RequestBody
ред
@Controller @ResponseBody public interface RestController
рдХреНрдпреЛрдВ @ResponseBody?@ResponseBody
рдЙрди рддрд░реАрдХреЛрдВ рдкрд░ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рди рдХрд┐ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рдеред рдпрджрд┐ @RestController
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ @RestController
рддреЛ @RestController
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ @RestController
ред
рдирд┐рдпрдорд┐рдд рддрд░реАрдХреЗ Model
рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдПрдиреЛрдЯреЗрдЯ @ResponseBody
рд╡рд┐рдзрд┐рдпрд╛рдБ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ @ResponseBody
рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ HttpMessageConverter
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореАрдбрд┐рдпрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
@RequestMapping рдПрдиреЛрдЯреЗрд╢рди рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдпрдВрддреНрд░рдХ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд╣рд▓реЗ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ URI, http рд╡рд┐рдзрд┐, рднреЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдЖрджрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ред рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдЗрд╕реЗ рдПрдиреЛрдЯреЗрд╢рди @GetMapping
, @PostMapping
, рдЖрджрд┐ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЕрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдпреВрдЖрд░рдЖрдИ рдХреЛ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдиреЛрдЯреЗрд╢рди @GetMapping, @PostMapping, @DeleteMapping рдФрд░ рдЕрдиреНрдп рдХреНрдпрд╛ рд╣реИрдВ?Http рддрд░реАрдХреЛрдВ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреЗ рд╕рдВрдХреАрд░реНрдг рдПрдиреЛрдЯреЗрд╢рди рд╣реИрдВред
@GetMapping
- рд╣реИрдВрдбрд▓ рд╕реЗ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ@PostMapping
- рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ@DeleteMapping
- рд╣реИрдВрдбрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ@PutMapping
- рд╣реИрдВрдбрд▓ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ@PatchMapping
- рдкреИрдЪ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ
рдиреАрдЪреЗ рд▓рд┐рдЦрд╛ рд╕рдм рдХреБрдЫ рдЕрдиреНрдп рдПрдиреЛрдЯреЗрд╢рди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рднреА рд╣реИред
рдПрдиреЛрдЯреЗрд╢рди @GetMapping рдХреЗрд╡рд▓ рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рд╣реИ рдЬрд┐рд╕рдореЗрдВ @RequestMapping (рд╡рд┐рдзрд┐ = RequestMethod.GP) рд╢рд╛рдорд┐рд▓ рд╣реИ ред
рдпрд╣ рдЖрдкрдХреЛ рд╣реИрдВрдбрд▓рд░ рд╡рд┐рдзрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ (рд╡реЗ рд╕рдорд╛рди @RequestMapping рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ):
path
- рдпреВрдЖрд░рдЖрдИheaders
- рд╣реЗрдбрд░name
- рд╣реИрдВрдбрд▓рд░ рдирд╛рдоparams
- рдкреИрд░рд╛рдореАрдЯрд░produces
- рд▓реМрдЯрд╛рдП рдЧрдП рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ (JSON, XML, рдкрд╛рда)ред REST рдореЗрдВ рдкреНрд░рдпреБрдХреНрддconsumes
- рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ред REST рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдПрдиреЛрдЯреЗрд╢рди рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдкрде рд▓реЗрддрд╛ рд╣реИред
@GetMapping("managers") = @GetMapping(path = "managers")
@RequestParam рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣реИрдВрдбрд▓рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдорд┐рд▓ рд╕рдХреЗред
рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрд░реЛрдз: http://localhost:8080/getByName/name=Ivan
ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ Ivan
рдХреЛ рдЪрд░ name
рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧрд╛ред
@GetMapping("getByName") public User getUserByName(@RequestParam("name") String name) {
@PathVariable рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдпреВрдЖрд░рдЖрдИ рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рдЧ рдорд┐рд▓рддрд╛ рд╣реИред
URI: http://localhost:8080/getById/23
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб id
рдЪрд░ рдореЗрдВ 23
рдбрд╛рд▓ рджреЗрдЧрд╛ред
@GetMapping("getById/{id}") public User getUserById(@PathVariable("id") String id) {
Http рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХреЛрдб рдХреНрдпрд╛ рд╣реИрдВ?рдкреНрд░рд╛рдкреНрдд - 200 рдареАрдХ рд╣реИ
POST - 200 рдареАрдХ, 201 рдмрдирд╛рдпрд╛ рдЧрдпрд╛, 204 рдХреЛрдИ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ
PUT - 200 рдареАрдХ рд╣реИ, 201 рдмрдирд╛рдпрд╛ рдЧрдпрд╛, 204 рдХреЛрдИ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ
DELETE - 204 рдХреЛрдИ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ, 202 рд╕реНрд╡реАрдХреГрдд
рдореБрдЭреЗ @ResponseStatus рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕реНрд╡рдпрдВ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕реЗ рд╕рдордп рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдЖрдкрдХреЛ рдЗрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
@PostMapping @ResponseStatus(HttpStatus.CREATED) public void add(...) {...}
рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдПрдХ ResponseEntity
рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
ResponseEntity
рдФрд░ @ReponseStatus
рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред
рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреНрдпрд╛ рд╣реИ?рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ http рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд┐рдХрд╛рдп, рд╕реНрдерд┐рддрд┐ рдХреЛрдб, рд╢реАрд░реНрд╖рд▓реЗрдЦ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ http рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд░реАрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
@GetMapping("/hello") ResponseEntity hello() { return new ResponseEntity("Hello World!", HttpStatus.OK); }
рдХреНрдпреЛрдВ @RequestBody?рдЖрдк рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ @RequestBody
рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЕрдиреБрд░реЛрдз рдмреЙрдбреА рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рдПред
@PostMapping("accounts")
рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдЖрдк @Validated
рдХреЗ рд╕рд╛рде @Validated
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ RestTemplate рдХреНрдпрд╛ рд╣реИ? рдЗрд╕рдХреЗ рдХреНрдпрд╛ рдлрд╛рдпрджреЗ рд╣реИрдВ?RestTemplate HTTP рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИред рдпрд╣ рдПрдХ рд▓рд╛рдЗрди рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ REST рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ API рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
RestTemplate restTemplate = new RestTemplate(); String fooResourceUrl = "http://localhost:8080/spring-rest/foos"; ResponseEntity response = restTemplate.getForEntity(fooResourceUrl + "/1", String.class);
рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред