рд╕рднреА рдХреЛ рд╢реБрдн рд╕рдВрдзреНрдпрд╛!
рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ (рдЗрд╕ рд╕рд╛рд▓ рдХреЗ рдлрд░рд╡рд░реА рдореЗрдВ), рдореИрдВрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЬрд╛рд╡рд╛ рдХреЛ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдЙрд╕ рдХреНрд╖рдг рд╕реЗ рдореИрдВ рд▓рдЧрд╛рддрд╛рд░ рдЗрд╕ рднрд╛рд╖рд╛ рдХреА рд╕рднреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддрд╛ рд╣реВрдВред рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВ рдПрдХ рд╣рдм рдкрд░ RESTful рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдЖрдпрд╛ рдореИрдВрдиреЗ рдкрдврд╝рд╛ рдФрд░ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдореБрдЭреЗ рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЗ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдиреЗ рдореБрдЭ рдкрд░ рднреА рдкреНрд░рд╣рд╛рд░ рдХрд┐рдпрд╛ рдХрд┐ рд╢реБрд░реБрдЖрддреА рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓реЗрдЦ рдХреИрд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рдереЗред рдореИрдВрдиреЗ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рд╡реЗрдм рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред
рдореИрдВ рд╕рдЪ рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ред рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рддреНрд╡рд░рд┐рдд рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рд╢реБрд░реБрдЖрдд
рдЖрд╡рд╢реНрдпрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░
рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдЖрдИрдбреАрдИ рд╣реИред рдореБрдЭреЗ рдЧреНрд░рд╣рдг рдкрд╕рдВрдж рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЬрд╛рд╡рд╛ рдИрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬреВрдиреЛ рдХреЗ рд▓рд┐рдП рдПрдХреНрд▓рд┐рдкреНрд╕ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ред рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рдкрд┐рдЫрд▓реА рд░рд┐рд▓реАрдЬ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рдереА, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдЬрд░реНрд╕реА рдХреЛ REST рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ред рдЗрд╕реЗ рдвреВрдВрдврдирд╛ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдмрд┐рд▓реНрдХреБрд▓ рдЖрдИрдбреАрдИ рдХреА рддрд░рд╣ред рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдЧреНрд░рд╣рдг рдХреЗ рд▓рд┐рдП рдЧреНрд▓рд╛рд╕рдлрд┐рд╢ рдкреНрд▓рдЧ-рдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ред рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢ рдХреЗрд╡рд▓ рдЦреЛрдЬрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЦреИрд░, рдпрд╣ рд╕рдм рд╣реИред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг
So. рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧреНрд░рд╣рдг, рдЬрд░реНрд╕реА рдЬрд╛рд░ рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рдЧреНрд▓рд╛рд╕рдлрд┐рд╢ рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдЕрдм рдПрдХреНрд▓рд┐рдкреНрд╕ рдЪрд▓рд╛рдПрдВ рдФрд░ рдЕрдВрддрд┐рдо рдЯреИрдм рдкрд░ рдПрдХ рдЦрд╛рд▓реА рдбрд╛рдпрдиреЗрдорд┐рдХ рд╡реЗрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЛ рдЪреЗрдХ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ, рдЬреЛ рдХрд┐ web.xml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
рдЧреНрд░рд╣рдг рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ (Run As -> Run On Server)ред
рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдкреЗрдЬ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдЕрдм рдЖрдкрдХреЛ рдЬрд░реНрд╕реА JAR рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ
[ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдо ] / WebContent / WEB-INF / lib рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред рдЕрдм web.xml рдлрд╝рд╛рдЗрд▓ рдХреА рдмрд╛рд░реА рд╣реИред рдпрд╣
[ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдо ] / WebContent / WEB-INF рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ ред
рдпрд╣рд╛рдБ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>WebRest</display-name> <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>ru.example.rest.resource</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app>
рдкреИрд░рд╛рдореАрдЯрд░
com.sun.jersey.config.property.packages рдХреЛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдЙрд╕ рдкреИрдХреЗрдЬ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реА рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ url- рдкреИрдЯрд░реНрди рдЯреИрдЧ рд╣рдорд╛рд░реА рд╡реЗрдм рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдкрде рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ Restful рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдПрдХ рдореМрд▓рд┐рдХ рдХреНрд╖рдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдЦреБрдж рдХрд╣рддреА рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдЕрдкрдирд╛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдм рд╣рдорд╛рд░реА рд╡реЗрдм рд╕реЗрд╡рд╛
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ: 8080 / [
рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд╛рдо ] / рдмрд╛рдХреА /ред рдпрд╣ рд╣рдорд╛рд░рд╛ рдЖрдзрд╛рд░ рдпреВрдЖрд░рдЖрдИ рд╣реЛрдЧрд╛ред
рд╡реЗрдм рд╕реЗрд╡рд╛ рдирд┐рд░реНрдорд╛рдг
рдЗрдХрд╛рдИ рдирд┐рд░реНрдорд╛рдг
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡реЗрдм-рд╕реЗрд╡рд┐рд░рд┐рд╕ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдорд┐рдиреА рдбрд╛рдпрд░реА рд╣реИред рдпрд╛рдиреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА
рд╕рдВрджреЗрд╢ рд╕рдВрд╕реНрдерд╛рдПрдБ рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдпрд╣рд╛рдВ рдореИрд╕реЗрдЬ рдХреНрд▓рд╛рд╕ рд╣реИ
package ru.example.rest.entity; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Message { private long messageId; private String messageTitle; private String messageText; public Message() { } public Message(long messageId, String messageTitle, String messageText) { this.messageId = messageId; this.messageTitle = messageTitle; this.messageText = messageText; } public long getMessageId() { return messageId; } public void setMessageId(long messageId) { this.messageId = messageId; } public String getMessageTitle() { return messageTitle; } public void setMessageTitle(String messageTitle) { this.messageTitle = messageTitle; } public String getMessageText() { return messageText; } public void setMessageText(String messageText) { this.messageText = messageText; } @Override public String toString() { return "Message [messageId=" + messageId + ", messageTitle=" + messageTitle + ", messageText=" + messageText + "]"; } }
рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдпрд╣рд╛рдВ рд╕рд╡рд╛рд▓ рдЙрдард╛ рд╕рдХрддреА рд╣реИ рд╡рд╣ рд╣реИ @XmlRootElement рдПрдиреЛрдЯреЗрд╢рдиред рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЬрд╛рд╡рд╛ рд╕реНрд╡рдпрдВ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рд▓рд┐рдП XML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджреЗред рдмрд╛рдХреА рддреАрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд░реНрдЧ рд╣реИред рд╕рдВрджреЗрд╢ рд╕рдВрджреЗрд╢, рд╢реАрд░реНрд╖рдХ рд╕рдВрджреЗрд╢ рдФрд░ рдкрд╛рда рд╕рдВрджреЗрд╢ред
рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдирд╛
рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдореИрдВ рдУрдЖрд░рдПрдо рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рд╖рдп рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЬреЛ рдЕрдЧрд▓реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕реВрдЪреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕ рд╢реАрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред
рдпрд╣рд╛рдВ рдбреЗрдЯрд╛ рд╡рд░реНрдЧ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ
package ru.example.rest.model; import java.util.ArrayList; import java.util.List; import ru.example.rest.entity.Message; public class Data { private static List<Message> data; private static long count = 5; static { data = new ArrayList<Message>(); data.add(new Message(1L, "Hello", "Hello! I'm first entry!")); data.add(new Message(2L, "2nd", "second messages")); data.add(new Message(3L, "here again!", "some text")); data.add(new Message(4L, "HI!", "pam param")); } public static List<Message> getData() { return data; } public static Message findMessageById(long id) { for (Message message : data) { if (message.getMessageId() == id) { return message; } } return null; } public static boolean deleteMessageById(long id) { boolean result = false; for (Message message : data) { if (message.getMessageId() == id) { result = data.remove(message); return result; } } return result; } public static boolean updateMessage(Message message) { boolean result = false; for (Message temp: data) { if (temp.getMessageId() == message.getMessageId()) { temp.setMessageText(message.getMessageText()); temp.setMessageTitle(message.getMessageTitle()); result = true; } } return result; } public static boolean addMesage(Message message) { message.setMessageId(count); count++; return data.add(message); } }
рдпрд╣рд╛рдВ рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреБрдЫ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдмрд╛рдж рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, getData () рд╡рд┐рдзрд┐ рд╣рдореЗрдВ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рджреЗрддреА рд╣реИред рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдЙрдирдХреЗ рдирд╛рдореЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдЕрдм рд╕реЗрд╡рд╛ рд╣реА
рд╕реЗрд╡рд╛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рд╕рдВрд╕рд╛рдзрди рд╡рд░реНрдЧ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ URI рдХрд┐рд╕ рд╕рдВрд╕рд╛рдзрди рдпрд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрдпрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реЗрдЧрд╛ред рдореБрдЦреНрдп рдПрдиреЛрдЯреЗрд╢рди рд╣реИрдВ
рдкрде ("рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рдкрде") рдпрд╣ рдПрдиреЛрдЯреЗрд╢рди рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ рдпрд╛ рд╡рд┐рдзрд┐ рдкрддреЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдкрде рдХрд╛ рдПрдХ рд░реВрдкрд╛рдВрддрд░ рднреА рд╣реИ ("{id}") рдЬреЛ рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдИрдбреА рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреА рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЦрдкрдд (рдореАрдбрд┐рдпрд╛ рдЯрд╛рдЗрдк) рдФрд░ рдкреНрд░реЛрдбреНрдпреВрд╕ (рдореАрдбрд┐рдпрд╛ рдЯрд╛рдЗрдк) рд╣рдореЗрдВ рдХреНрд░рдорд╢рдГ рдкреНрд░рд╛рдкреНрдд рдФрд░ рднреЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдВрдЧреЗред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ APPLICATION_XML рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ред JSON рдХреНрдпреЛрдВ рдирд╣реАрдВ рдкреВрдЫреЗрдВ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рдХрд┐ рд╡реЗ JAX-Bind рдХреЗ рд╕рд╛рде рдЖрдП рдереЗред
GET - рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕реЗрд╡рд╛ рд╕реЗ рдбреЗрдЯрд╛ рднреЗрдЬ рджреЗрдЧреАред
PUT / POST - рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝реЗрдЧреА / рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧреАред
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдкреЛрд╕реНрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП PUT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
DELETE - рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдорд╛рд░реЗ рд╕рдВрдЧреНрд░рд╣рдг рд╕реЗ рдбреЗрдЯрд╛ рд╣рдЯрд╛ рджреЗрдЧреА
рдпрд╣рд╛рдБ рд╕рдВрд╕рд╛рдзрди рд╡рд░реНрдЧ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ
рдкреИрдХреЗрдЬ ru.example.rest.resource;
import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.xml.bind.JAXBElement; import ru.example.rest.entity.Message; import ru.example.rest.model.Data; @Path("message") public class MessageResource { @GET @Produces(MediaType.APPLICATION_XML) public List<Message> getAllMessages() { List<Message> messages = Data.getData(); if (messages == null) { throw new RuntimeException("Can't load all messages"); } return messages; } @GET @Path("{id}") @Produces(MediaType.APPLICATION_XML) public Message getMessageById(@PathParam("id") long id) { Message message = Data.findMessageById(id); if (message == null) { throw new RuntimeException("can't find mesage with id = " + id); } return message; } @PUT @Consumes(MediaType.APPLICATION_XML) public void addMessage(JAXBElement<Message> message) { if (Data.addMesage(message.getValue()) != true) { throw new RuntimeException("can't add mesage with id = " + message.getValue().getMessageId()); } } @DELETE @Path("{id}") public void deleteMessage(@PathParam("id") long id) { if (Data.deleteMessageById(id) != true) { throw new RuntimeException("can't delete mesage with id = " + id); } } @POST @Consumes(MediaType.APPLICATION_XML) public void updateMessage(JAXBElement<Message> message) { if (Data.updateMessage(message.getValue()) != true) { throw new RuntimeException("can't update mesage with id = " + message.getValue().getMessageId()); } } }
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рд╣рдорд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрди рд╡рд░реНрдЧ
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛: 8080 / [
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд╛рдо ] / рдмрд╛рдХреА / рд╕рдВрджреЗрд╢ рдЬрдм рдПрдХ GET рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╕рднреА рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓реЗрдЧреАред рдЬрдм рд╕рдВрджреЗрд╢ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде POST рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрджреЗрд╢ рддрддреНрд╡ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдВрджреЗрд╢ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ PUT рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╕рдВрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВрдЧреЗред рдЬреАрдИрдЯреА
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ : 8080 / [
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдо ] / рд░реЗрд╕реНрдЯ / рдореИрд╕реЗрдЬ / рдЖрдИрдбреА рдЬреИрд╕реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдкрддреЗ рдкрд░ рдкрд╣реБрдВрдЪрддреЗ рд╕рдордп, рд╣рдо рдЖрдИрдбреА рдХреЗ рдмрд░рд╛рдмрд░ рдПрдХ рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рд▓реМрдЯрд╛рдПрдВрдЧреЗред рдФрд░ рдЕрдЧрд░ рдЖрдк DELETE рдореЗрдердб рднреА рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдИрдбреА рдирдВрдмрд░ рд╡рд╛рд▓рд╛ рдореИрд╕реЗрдЬ рдбрд┐рд▓реАрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЫреЛрдЯреЗ рдЧреНрд░рд╛рд╣рдХ рдЙрджрд╛рд╣рд░рдг
рдЗрд╕ рд╕реЗрд╡рд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд┐рдЦрд╛ред рдПрдХ рдирд┐рдпрдорд┐рдд рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрдВрд╕реЛрд▓ рдХреЛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдЙрд╕рдХреА рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рд╣реИ
public class RestClient { public static void main(String[] args) { ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); WebResource service = client.resource(getBaseURI()); GenericType<List<Message>> genericType = new GenericType<List<Message>>() { }; List<Message> messages = service.path("rest").path("message") .accept(MediaType.APPLICATION_XML).get(genericType); for (Message temp : messages) { System.out.println(temp); } long id = 4; Message message = service.path("rest").path("message") .path(String.valueOf(id)).accept(MediaType.APPLICATION_XML) .get(Message.class); System.out.println("Message with ID = " + id); System.out.println(message); message.setMessageTitle("udated title"); message.setMessageText("updated text"); service.path("rest").path("message").post(message); message = service.path("rest").path("message").path(String.valueOf(id)) .accept(MediaType.APPLICATION_XML).get(Message.class); System.out.println("Message with ID = " + id); System.out.println(message); System.out.println("delete message with ID = " + id); service.path("rest").path("message").path(String.valueOf(id)).delete(); messages = service.path("rest").path("message") .accept(MediaType.APPLICATION_XML).get(genericType); for (Message temp : messages) { System.out.println(temp); } System.out.println("puttin' message"); message = new Message(); message.setMessageText("PUT MESSAGE!"); message.setMessageTitle("Put message"); service.path("rest").path("message") .accept(MediaType.APPLICATION_XHTML_XML).put(message); messages = service.path("rest").path("message") .accept(MediaType.APPLICATION_XML).get(genericType); for (Message temp : messages) { System.out.println(temp); } } private static URI getBaseURI() { return UriBuilder.fromUri("http://localhost:8080/WebRest").build(); } }
рдпрд╣рд╛рдБ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ
GenericType<List<Message>> genericType = new GenericType<List<Message>>() {}; List<Message> messages = service.path("rest").path("message") .accept(MediaType.APPLICATION_XML).get(genericType);
рдЬреЗрдиреЗрд░рд┐рдХ рдЯрд╛рдЗрдк рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдПрдХ рд╕реВрдЪреА рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЗрд╕реЗ JAX-B рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛рдПрдВ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рд╕рднреА рдбреЗрдЯрд╛ рдЬреЛ рд╣рдо JAXBElement рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ, рдЖрдкрдХреЛ рдЬрд░реНрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЛ рднреА рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдореИрд╕реЗрдЬ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреА рд╣реЛрдЧреАред
рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрджрд┐ рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреАред рдореИрдВ рдХрд┐рд╕реА рднреА рд╕реБрдЭрд╛рд╡ рдФрд░ рдХрд┐рд╕реА рднреА рдЖрд▓реЛрдЪрдирд╛ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред рдореИрдВ рдЕрднреА рд╕реАрдЦ рд░рд╣рд╛ рд╣реВрдБ
рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдФрд░ рд╕рд░реНрд╡рд┐рд╕ рдХреЛрдб рдореЗрд░реЗ github
HERE рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдбреЗрдЯрд╛
рд╡реЛрдЧреЗрд▓рд╛ рд▓реЗрдЦ рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рд╣реИред