рд╕реНрдкреНрд░рд┐рдВрдЧ рдкреНрд░реЛрдлреЗрд╢рдирд▓ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрд╢рди рдХреА рддреИрдпрд╛рд░реАред рд╡рд╕рдВрдд рдХрд╛ рдЖрд░рд╛рдо

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


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



рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛
  1. рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди, рдХрдВрдЯреЗрдирд░, IoC, рд╕реЗрдо
  2. рдПрдУрдкреА (рдкрд╣рд▓реВ-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ)
  3. рдЬреЗрдбреАрдмреАрд╕реА, рд▓реЗрдирджреЗрди, рдЬреЗрдкреАрдП, рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛
  4. рд╡рд╕рдВрдд рдХрд╛ рдмреВрдЯ
  5. рд╕реНрдкреНрд░рд┐рдВрдЧ mvc
  6. рд╡рд╕рдВрдд рд╕реБрд░рдХреНрд╖рд╛
  7. рдмрд╛рдХреА
  8. рдкрд░реАрдХреНрд╖рдг



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


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) { //some logic } 

@PathVariable рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?

рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдпреВрдЖрд░рдЖрдИ рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рдЧ рдорд┐рд▓рддрд╛ рд╣реИред


URI: http://localhost:8080/getById/23


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб id рдЪрд░ рдореЗрдВ 23 рдбрд╛рд▓ рджреЗрдЧрд╛ред


 @GetMapping("getById/{id}") public User getUserById(@PathVariable("id") String id) { //some logic } 

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") //,   JSON    Account public void handle(@RequestBody Account account) {...} 

рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдЖрдк @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); 

рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles