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

рдЦрд░реЛрдВрдЪ рд╕реЗ рдПрдХ рднрд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреИрдЯрдореИрди рдЕрдкрдиреЗ рдкреНрд░рд┐рдп рдЕрд▓реНрдлреНрд░реЗрдб (рд░реЙрдмрд┐рди рдмрд╣реБрдд рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ) рдХреЛ рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдХрд╛рдо рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдирд╛рдордХ рдХреБрдЫ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЫреЛрдЯреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдЧрд╛ рдЖрд╡реЗрджрди рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред
рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкреНрд░рд┐рдп рдЕрд▓реНрдлреНрд░реЗрдб рдиреЗ рдЬрд╕реНрдЯрд┐рд╕ рд▓реАрдЧ рд╕рджрд╕реНрдпрддрд╛ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдХрдо рд╕реЗ рдХрдо, рдЗрд╕рдХреЗ рдмреИрдХ-рдПрдВрдб рдкрд╛рд░реНрдЯреНрд╕, рдЪреВрдВрдХрд┐ рдмреИрдЯрдореИрди рд╕реАрдзреЗ REST API рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдХрдИ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдПрдХ рдкреИрдХреЗрдЬ (рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕реАрдПрд▓рдЖрдИ) рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЙрдмрдВрдЯреВ рдкрд░ рдЦрд░реЛрдВрдЪ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡рд┐рдзрд┐ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рд╡рд╕рдВрдд рднреА рдЕрдкрдиреЗ
рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдСрдирд▓рд╛рдЗрди рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди
рдХрд░рддрд╛ рд╣реИ ред
рдпрд╣рд╛рдВ рдирд╡реАрдирддрдо рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб
рдХрд░реЗрдВ ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд╕рдВрд╕реНрдХрд░рдг 1.3.0.M1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:
SPRING_BOOT_HOME=<extracted path>/spring-1.3.0.M1 PATH=$SPRING_BOOT_HOME/bin:$PATH
рдлрд┐рд░ bashrc рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдЬреЛрдбрд╝реЗрдВ:
<extracted-path>/spring-1.3.0.M1/shell-completion/bash/spring
рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧ-рдХреНрд▓рд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдпрд╣ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдСрдЯреЛ-рдкреВрд░рд╛ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдФрд░ "bashrc" рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ "рд╕реНрд░реЛрдд" рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреА рд╣реЛрдЧреАред
рдпрд╣ рд▓реЗрдЦ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
- рд╡рд╕рдВрдд рдЛрддреБ
- рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛
- MongoDBред
рд╣рдо рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдХрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореЗрд░реЗ GitHub рднрдВрдбрд╛рд░ рд╕реЗ рдПрдХ рдирдореВрдирд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА
рд╣реИ ред
spring init -dweb,data-mongodb,flapdoodle-mongo --groupId com.justiceleague --artifactId justiceleaguemodule --build maven justiceleaguesystem
рдпрд╣ рдПрдХреАрдХреГрдд рдореЛрдВрдЧрдмреАрдбреА рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╛рд╡реЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕реНрдкреНрд░рд┐рдВрдЧ-рдХреНрд▓рд┐ "рдбреЗрдореЛ" рдирд╛рдордХ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдкрдиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдореЗрд░реЗ GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдЪрд░рдг рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ JAR рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд╕рдорд╛рди рд╕рд░рд▓ рд╣реИред рдЬреЛ рдмрд╕ рд╡рд╕рдВрдд рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @SpringBootApplication рджреНрд╡рд╛рд░рд╛ рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд░реНрдЧ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
package com.justiceleague.justiceleaguemodule; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class JusticeLeagueManagementApplication { public static void main(String[] args) { SpringApplication.run(JusticeLeagueManagementApplication.class, args); } }
рдлрд┐рд░ рд╣рдо рдбреЛрдореЗрди рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛ рдХреЗ рд╕реНрддрд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MongoDB рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреЛрдореЗрди рд╡рд░реНрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
package com.justiceleague.justiceleaguemodule.domain; import org.bson.types.ObjectId; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.index.Indexed; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "justiceLeagueMembers") public class JusticeLeagueMemberDetail { @Id private ObjectId id; @Indexed private String name; private String superPower; private String location; public JusticeLeagueMemberDetail(String name, String superPower, String location) { this.name = name; this.superPower = superPower; this.location = location; } public String getId() { return id.toString(); } public void setId(String id) { this.id = new ObjectId(id); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSuperPower() { return superPower; } public void setSuperPower(String superPower) { this.superPower = superPower; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } }
рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рд╕рд╣рдЬ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреЗрдкреАрдП / рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рд╣реИред рдПрдиреЛрдЯреЗрд╢рди рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИрдВред рдХреЗрд╡рд▓ рдирдИ рдЪреАрдЬ рдПрдиреЛрдЯреЗрд╢рди рд╣реИред
@Document
рдЬреЛ рдореЛрдВрдЧреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдирд╛рдо рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рд╕реБрдкрд░рд╣реАрд░реЛ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдкреНрд░рд╢реНрди рдирд╛рдо рд╕реЗ рдЦреЛрдЬреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдВрдЧреЗред
рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреЗрд╢ рдХреА, рдЬреЛ рдирд┐рдпрдорд┐рдд рд╕реАрдЖрд░рдпреВрдбреА рдСрдкрд░реЗрд╢рди рдФрд░ рдХреБрдЫ рд░реАрдб рдСрдкрд░реЗрд╢рдВрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдереАред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ, рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╡рд░реНрдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИрдВ:
package com.justiceleague.justiceleaguemodule.dao; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.Query; import com.justiceleague.justiceleaguemodule.domain.JusticeLeagueMemberDetail; public interface JusticeLeagueRepository extends MongoRepository < JusticeLeagueMemberDetail, String > { @Query("{ 'name' : {$regex: ?0, $options: 'i' }}") JusticeLeagueMemberDetail findBySuperHeroName(final String superHeroName); }
рдорд╛рдирдХ рд╕реЗрд╡ рдСрдкрд░реЗрд╢рди рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЗ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдбреЛрдореЗрди рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред
@Query
рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде
@Query
рд╣рдо рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╕реБрдкрд░ рд╣реАрд░реЛ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред MongoDB рдореЗрдВ рдореИрдЪ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдкрд░ "i" рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдорддрд▓рдм рдорд╛рдорд▓реЗ рдХреА рдЕрдирджреЗрдЦреА рдХрд░рдирд╛ рд╣реИред
рдлрд┐рд░, рд╣рдо рд╕реЗрд╡рд╛ рд╕реНрддрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреНрдпрд╛рдп рд▓реАрдЧ рдХреЗ рдирдП рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

package com.justiceleague.justiceleaguemodule.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.justiceleague.justiceleaguemodule.constants.MessageConstants.ErrorMessages; import com.justiceleague.justiceleaguemodule.dao.JusticeLeagueRepository; import com.justiceleague.justiceleaguemodule.domain.JusticeLeagueMemberDetail; import com.justiceleague.justiceleaguemodule.exception.JusticeLeagueManagementException; import com.justiceleague.justiceleaguemodule.service.JusticeLeagueMemberService; import com.justiceleague.justiceleaguemodule.web.dto.JusticeLeagueMemberDTO; import com.justiceleague.justiceleaguemodule.web.transformer.DTOToDomainTransformer; @Service public class JusticeLeagueMemberServiceImpl implements JusticeLeagueMemberService { @Autowired private JusticeLeagueRepository justiceLeagueRepo; public void addMember(JusticeLeagueMemberDTO justiceLeagueMember) { JusticeLeagueMemberDetail dbMember = justiceLeagueRepo.findBySuperHeroName(justiceLeagueMember.getName()); if (dbMember != null) { throw new JusticeLeagueManagementException(ErrorMessages.MEMBER_ALREDY_EXISTS); } JusticeLeagueMemberDetail memberToPersist = DTOToDomainTransformer.transform(justiceLeagueMember); justiceLeagueRepo.insert(memberToPersist); } }
рдлрд┐рд░, рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рдпрджрд┐ рдкреНрд░рддрд┐рднрд╛рдЧреА рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред рдЕрдиреНрдпрдерд╛, рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЛ рдЬреЛрдбрд╝реЗрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╕рдореНрдорд┐рд▓рд┐рдд рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд▓рд╛рдЧреВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред
рдЕрдВрдд рдореЗрдВ, рдЕрд▓реНрдлреНрд░реЗрдб рд╕реНрдкреНрд░рд┐рдВрдЧ рд░реАрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд░рдИрдПрд╕рдЯреА рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рддрд╛рдХрд┐ рдмреИрдЯрдореИрди HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╡рд░рдг рднреЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗ - рд╡рд╣ рд▓рдЧрд╛рддрд╛рд░ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ:
package com.justiceleague.justiceleaguemodule.web.rest.controller; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; import com.justiceleague.justiceleaguemodule.constants.MessageConstants; import com.justiceleague.justiceleaguemodule.service.JusticeLeagueMemberService; import com.justiceleague.justiceleaguemodule.web.dto.JusticeLeagueMemberDTO; import com.justiceleague.justiceleaguemodule.web.dto.ResponseDTO; @RestController @RequestMapping("/justiceleague") public class JusticeLeagueManagementController { @Autowired private JusticeLeagueMemberService memberService; @ResponseBody @ResponseStatus(value = HttpStatus.CREATED) @RequestMapping(method = RequestMethod.POST, path = "/addMember", produces = { MediaType.APPLICATION_JSON_VALUE }, consumes = { MediaType.APPLICATION_JSON_VALUE }) public ResponseDTO addJusticeLeagueMember(@Valid @RequestBody JusticeLeagueMemberDTO justiceLeagueMember) { ResponseDTO responseDTO = new ResponseDTO(ResponseDTO.Status.SUCCESS, MessageConstants.MEMBER_ADDED_SUCCESSFULLY); try { memberService.addMember(justiceLeagueMember); } catch (Exception e) { responseDTO.setStatus(ResponseDTO.Status.FAIL); responseDTO.setMessage(e.getMessage()); } return responseDTO; } }
рдмреИрдЯрдореИрди рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо JSON рдкреЗрд▓реЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрд▓реНрдлреНрд░реЗрдб рдкреБрд░рд╛рдиреЗ рдЬрдорд╛рдиреЗ рдХрд╛ рд╣реЛрдЧрд╛ рдФрд░ XML рдХреЛ рдкрд╕рдВрдж рдХрд░реЗрдЧрд╛ред
рд╣рдорд╛рд░рд╛ рдкреБрд░рд╛рдирд╛ рджреЛрд╕реНрдд рдЕрд▓реНрдлреНрд░реЗрдб рдЯреАрдбреАрдбреА (рдкрд░реАрдХреНрд╖рдг-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╡рд┐рдХрд╛рд╕, "рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдХрд╛рд╕") рдХрд╛ рдПрдХ рдЧреБрд░реНрдЧрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓реНрдлреНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдиреНрдпрд╛рдп рд▓реАрдЧ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рд╕рд╣реА рдФрд░ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣рд╛рдБ рд╣рдо рдХреЗрд╡рд▓ REST API рдкрд░реАрдХреНрд╖рдг рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред рдЕрд▓реНрдлреНрд░реЗрдб рдиреЗ рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЕрд╡рддрд╛рд░ рд▓рд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ
рдЧрд┐рдердмреЙрд╕ рднрдВрдбрд╛рд░ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
package com.justiceleague.justiceleaguemodule.test.util; import java.io.IOException; import java.net.UnknownHostException; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import com.fasterxml.jackson.databind.ObjectMapper; import com.justiceleague.justiceleaguemodule.domain.JusticeLeagueMemberDetail; import de.flapdoodle.embed.mongo.MongodExecutable; import de.flapdoodle.embed.mongo.MongodStarter; import de.flapdoodle.embed.mongo.config.IMongodConfig; import de.flapdoodle.embed.mongo.config.MongodConfigBuilder; import de.flapdoodle.embed.mongo.config.Net; import de.flapdoodle.embed.mongo.distribution.Version; @RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc public abstract class BaseIntegrationTest { @Autowired protected MockMvc mockMvc; protected ObjectMapper mapper; private static MongodExecutable mongodExecutable; @Autowired protected MongoTemplate mongoTemplate; @Before public void setUp() { mapper = new ObjectMapper(); } @After public void after() { mongoTemplate.dropCollection(JusticeLeagueMemberDetail.class); } @BeforeClass public static void beforeClass() throws UnknownHostException, IOException { MongodStarter starter = MongodStarter.getDefaultInstance(); IMongodConfig mongoConfig = new MongodConfigBuilder().version(Version.Main.PRODUCTION) .net(new Net(27017, false)).build(); mongodExecutable = starter.prepare(mongoConfig); try { mongodExecutable.start(); } catch (Exception e) { closeMongoExecutable(); } } @AfterClass public static void afterClass() { closeMongoExecutable(); } private static void closeMongoExecutable() { if (mongodExecutable != null) { mongodExecutable.stop(); } } }
package com.justiceleague.justiceleaguemodule.web.rest.controller; import org.hamcrest.beans.SamePropertyValuesAs; import org.junit.Assert; import org.junit.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import com.justiceleague.justiceleaguemodule.constants.MessageConstants; import com.justiceleague.justiceleaguemodule.constants.MessageConstants.ErrorMessages; import com.justiceleague.justiceleaguemodule.domain.JusticeLeagueMemberDetail; import com.justiceleague.justiceleaguemodule.test.util.BaseIntegrationTest; import com.justiceleague.justiceleaguemodule.web.dto.JusticeLeagueMemberDTO; import com.justiceleague.justiceleaguemodule.web.dto.ResponseDTO; import com.justiceleague.justiceleaguemodule.web.dto.ResponseDTO.Status; public class JusticeLeagueManagementControllerTest extends BaseIntegrationTest { @Test public void testAddJusticeLeagueMember() throws Exception { JusticeLeagueMemberDTO flash = new JusticeLeagueMemberDTO("Barry Allen", "super speed", "Central City"); String jsonContent = mapper.writeValueAsString(flash); String response = mockMvc .perform(MockMvcRequestBuilders.post("/justiceleague/addMember") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_JSON).content(jsonContent)) .andExpect(MockMvcResultMatchers.status().isCreated()).andReturn().getResponse().getContentAsString(); ResponseDTO expected = new ResponseDTO(Status.SUCCESS, MessageConstants.MEMBER_ADDED_SUCCESSFULLY); ResponseDTO receivedResponse = mapper.readValue(response, ResponseDTO.class); Assert.assertThat(receivedResponse, SamePropertyValuesAs.samePropertyValuesAs(expected)); } @Test public void testAddJusticeLeagueMemberWhenMemberAlreadyExists() throws Exception { JusticeLeagueMemberDetail flashDetail = new JusticeLeagueMemberDetail("Barry Allen", "super speed","Central City"); mongoTemplate.save(flashDetail); JusticeLeagueMemberDTO flash = new JusticeLeagueMemberDTO("Barry Allen", "super speed", "Central City"); String jsonContent = mapper.writeValueAsString(flash); String response = mockMvc .perform(MockMvcRequestBuilders.post("/justiceleague/addMember"). accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_JSON).content(jsonContent)) .andExpect(MockMvcResultMatchers.status().isCreated()).andReturn().getResponse() .getContentAsString(); ResponseDTO expected = new ResponseDTO(Status.FAIL, ErrorMessages.MEMBER_ALREDY_EXISTS); ResponseDTO receivedResponse = mapper.readValue(response, ResponseDTO.class); Assert.assertThat(receivedResponse, SamePropertyValuesAs.samePropertyValuesAs(expected)); } @Test public void testAddJusticeLeagueMemberWhenNameNotPassedIn() throws Exception {
рд╢рд╛рдпрдж рдпрд╣реА рд╕рдм рд╣реИред рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХреА рдорджрдж рд╕реЗ, рдЕрд▓реНрдлреНрд░реЗрдб рдПрдХ REST рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдПрдХ рдиреНрдпреВрдирддрдо рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╡рд╛рд▓реА рдиреНрдпрд╛рдп рд▓реАрдЧ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рд╕рдордп рдХреЗ рд╕рд╛рде, рд╣рдо рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдФрд░ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЕрд▓реНрдлреНрд░реЗрдб рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдЕрдореЗрдЬрд╝реЕрди рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреИрд╕реЗ рдвреВрдВрдврддреЗ рд╣реИрдВред рд░реЛрдорд╛рдВрдЪрдХ рд╕рдордп рд╣рдореЗрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬреБрдбрд╝реЗ рд░рд╣реЗрдВ!
рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рд╣рдо рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░
рдПрдХ рдЦреБрд▓реЗ рд╡реЗрдмрд┐рдирд╛рд░ рдореЗрдВ рдЖрдордВрддреНрд░рд┐рдд рд╣реИрдВ, рдЬреЛ 6 рдлрд░рд╡рд░реА рдХреЛ рднреМрддрд┐рдХ рдФрд░ рдЧрдгрд┐рддреАрдп рд╡рд┐рдЬреНрдЮрд╛рди рдХреЗ рдЙрдореНрдореАрджрд╡рд╛рд░ -
рдпреВрд░реА рдбреНрд╡реЙрд░реНрдЬрд╝рддреНрд╕реНрдХреА рджреНрд╡рд╛рд░рд╛ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред