Commit b4808f612a7e42cc01f6c6edfc2d4515d26579b6
1 parent
ab335a1a
feature: lesen und schreiben mittels REST/Jackson
Showing
7 changed files
with
130 additions
and
13 deletions
pom.xml
| ... | ... | @@ -18,6 +18,7 @@ |
| 18 | 18 | <mockito-version>2.7.22</mockito-version> |
| 19 | 19 | <dbunit-version>2.5.1</dbunit-version> |
| 20 | 20 | <slf4j-version>1.8.0-alpha0</slf4j-version> |
| 21 | + <jackson-version>2.8.8.1</jackson-version> | |
| 21 | 22 | </properties> |
| 22 | 23 | <dependencies> |
| 23 | 24 | <dependency> |
| ... | ... | @@ -62,6 +63,11 @@ |
| 62 | 63 | <artifactId>mysql-connector-java</artifactId> |
| 63 | 64 | <version>${mysql-version}</version> |
| 64 | 65 | </dependency> |
| 66 | + <dependency> | |
| 67 | + <groupId>com.fasterxml.jackson.core</groupId> | |
| 68 | + <artifactId>jackson-databind</artifactId> | |
| 69 | + <version>${jackson-version}</version> | |
| 70 | + </dependency> | |
| 65 | 71 | </dependencies> |
| 66 | 72 | <build> |
| 67 | 73 | <finalName>swXercise</finalName> | ... | ... |
src/main/java/net/ziemers/swxercise/db/BaseEntity.java
| ... | ... | @@ -6,13 +6,17 @@ import javax.persistence.MappedSuperclass; |
| 6 | 6 | |
| 7 | 7 | @MappedSuperclass |
| 8 | 8 | public class BaseEntity { |
| 9 | - | |
| 9 | + | |
| 10 | + protected Long id; | |
| 11 | + | |
| 10 | 12 | @Id |
| 11 | 13 | @GeneratedValue |
| 12 | - protected Long id; | |
| 13 | - | |
| 14 | 14 | public Long getId() { |
| 15 | 15 | return id; |
| 16 | 16 | } |
| 17 | 17 | |
| 18 | + public void setId(Long id) { | |
| 19 | + this.id = id; | |
| 20 | + } | |
| 21 | + | |
| 18 | 22 | } |
| 19 | 23 | \ No newline at end of file | ... | ... |
src/main/java/net/ziemers/swxercise/lg/user/Profile.java
| 1 | 1 | package net.ziemers.swxercise.lg.user; |
| 2 | 2 | |
| 3 | 3 | import javax.persistence.Entity; |
| 4 | +import javax.validation.constraints.NotNull; | |
| 4 | 5 | |
| 5 | 6 | import net.ziemers.swxercise.db.BaseEntity; |
| 6 | 7 | |
| 7 | 8 | @Entity |
| 8 | 9 | public class Profile extends BaseEntity { |
| 9 | 10 | |
| 11 | + @NotNull | |
| 12 | + private String username; | |
| 13 | + | |
| 14 | + @NotNull | |
| 10 | 15 | private String passwordHash; |
| 11 | 16 | |
| 12 | 17 | private String mailaddress; |
| 13 | 18 | |
| 19 | + public Profile() { | |
| 20 | + super(); | |
| 21 | + } | |
| 22 | + | |
| 23 | + public Profile(final String username, final String password) { | |
| 24 | + this.username = username; | |
| 25 | + // TODO Kennwort verhashen | |
| 26 | + this.passwordHash = password; | |
| 27 | + } | |
| 28 | + | |
| 29 | + public String getUsername() { | |
| 30 | + return username; | |
| 31 | + } | |
| 32 | + | |
| 33 | + public void setUsername(String username) { | |
| 34 | + this.username = username; | |
| 35 | + } | |
| 36 | + | |
| 14 | 37 | public String getPasswordHash() { |
| 15 | 38 | return passwordHash; |
| 16 | 39 | } | ... | ... |
src/main/java/net/ziemers/swxercise/lg/user/User.java
| 1 | 1 | package net.ziemers.swxercise.lg.user; |
| 2 | 2 | |
| 3 | +import javax.persistence.CascadeType; | |
| 3 | 4 | import javax.persistence.Entity; |
| 5 | +import javax.persistence.OneToOne; | |
| 6 | +import javax.validation.constraints.NotNull; | |
| 4 | 7 | |
| 5 | 8 | import net.ziemers.swxercise.db.BaseEntity; |
| 6 | 9 | |
| ... | ... | @@ -11,6 +14,18 @@ public class User extends BaseEntity { |
| 11 | 14 | |
| 12 | 15 | private String lastname; |
| 13 | 16 | |
| 17 | + @NotNull | |
| 18 | + private Profile profile; | |
| 19 | + | |
| 20 | + public User() { | |
| 21 | + super(); | |
| 22 | + } | |
| 23 | + | |
| 24 | + public User(final String firstname, final String lastname) { | |
| 25 | + this.firstname = firstname; | |
| 26 | + this.lastname = lastname; | |
| 27 | + } | |
| 28 | + | |
| 14 | 29 | public String getFirstname() { |
| 15 | 30 | return firstname; |
| 16 | 31 | } |
| ... | ... | @@ -27,4 +42,13 @@ public class User extends BaseEntity { |
| 27 | 42 | this.lastname = lastname; |
| 28 | 43 | } |
| 29 | 44 | |
| 45 | + @OneToOne(cascade = {CascadeType.ALL}) | |
| 46 | + public Profile getProfile() { | |
| 47 | + return profile; | |
| 48 | + } | |
| 49 | + | |
| 50 | + public void setProfile(Profile profile) { | |
| 51 | + this.profile = profile; | |
| 52 | + } | |
| 53 | + | |
| 30 | 54 | } | ... | ... |
src/main/java/net/ziemers/swxercise/lg/user/dto/UserDto.java
0 → 100644
| 1 | +package net.ziemers.swxercise.lg.user.dto; | |
| 2 | + | |
| 3 | +import javax.validation.constraints.NotNull; | |
| 4 | + | |
| 5 | +public class UserDto { | |
| 6 | + | |
| 7 | + @NotNull | |
| 8 | + private String username; | |
| 9 | + | |
| 10 | + @NotNull | |
| 11 | + private String password; | |
| 12 | + | |
| 13 | + private String firstname; | |
| 14 | + | |
| 15 | + private String lastname; | |
| 16 | + | |
| 17 | + private String mailaddress; | |
| 18 | + | |
| 19 | + public String getUsername() { | |
| 20 | + return username; | |
| 21 | + } | |
| 22 | + | |
| 23 | + public String getPassword() { | |
| 24 | + return password; | |
| 25 | + } | |
| 26 | + | |
| 27 | + public String getFirstname() { | |
| 28 | + return firstname; | |
| 29 | + } | |
| 30 | + | |
| 31 | + public String getLastname() { | |
| 32 | + return lastname; | |
| 33 | + } | |
| 34 | + | |
| 35 | + public String getMailaddress() { | |
| 36 | + return mailaddress; | |
| 37 | + } | |
| 38 | + | |
| 39 | +} | ... | ... |
src/main/java/net/ziemers/swxercise/ui/RestController.java renamed to src/main/java/net/ziemers/swxercise/ui/RestViewController.java
| ... | ... | @@ -4,20 +4,19 @@ import java.util.Collection; |
| 4 | 4 | |
| 5 | 5 | import javax.enterprise.context.ApplicationScoped; |
| 6 | 6 | import javax.inject.Inject; |
| 7 | -import javax.ws.rs.GET; | |
| 8 | -import javax.ws.rs.Path; | |
| 9 | -import javax.ws.rs.PathParam; | |
| 10 | -import javax.ws.rs.Produces; | |
| 7 | +import javax.ws.rs.*; | |
| 11 | 8 | import javax.ws.rs.core.MediaType; |
| 12 | 9 | |
| 10 | +import net.ziemers.swxercise.lg.user.Profile; | |
| 13 | 11 | import net.ziemers.swxercise.lg.user.User; |
| 12 | +import net.ziemers.swxercise.lg.user.dto.UserDto; | |
| 14 | 13 | import net.ziemers.swxercise.lg.user.service.UserService; |
| 15 | 14 | |
| 16 | 15 | @ApplicationScoped |
| 17 | -@Path(RestController.webContextPath) | |
| 18 | -public class RestController { | |
| 16 | +@Path(RestViewController.webContextPath) | |
| 17 | +public class RestViewController { | |
| 19 | 18 | |
| 20 | - static final String webContextPath = "/user"; | |
| 19 | + static final String webContextPath = "/users"; | |
| 21 | 20 | |
| 22 | 21 | @Inject |
| 23 | 22 | private UserService userService; |
| ... | ... | @@ -36,10 +35,32 @@ public class RestController { |
| 36 | 35 | } |
| 37 | 36 | |
| 38 | 37 | @GET |
| 39 | - @Path("/get") | |
| 38 | + @Path("/all") | |
| 40 | 39 | @Produces(MediaType.APPLICATION_JSON) |
| 41 | 40 | public Collection<User> getAllUsers() { |
| 42 | 41 | return userService.findAllUsers(); |
| 43 | 42 | } |
| 44 | 43 | |
| 44 | + @GET | |
| 45 | + @Path("{id}") | |
| 46 | + @Produces(MediaType.APPLICATION_JSON) | |
| 47 | + public User getById(@PathParam("id") Long id) { | |
| 48 | + return userService.findUser(id); | |
| 49 | + } | |
| 50 | + | |
| 51 | + @PUT | |
| 52 | + @Path("/user") | |
| 53 | + @Consumes(MediaType.APPLICATION_JSON) | |
| 54 | + @Produces({MediaType.TEXT_PLAIN}) | |
| 55 | + public String postUser(UserDto userDto) throws Exception { | |
| 56 | + final User user = new User(userDto.getFirstname(), userDto.getLastname()); | |
| 57 | + final Profile profile = new Profile(userDto.getUsername(), userDto.getPassword()); | |
| 58 | + | |
| 59 | + // TODO hierfür benötigen wir einen Mapper | |
| 60 | + user.setProfile(profile); | |
| 61 | + userService.saveUser(user); | |
| 62 | + | |
| 63 | + return "Ok"; | |
| 64 | + } | |
| 65 | + | |
| 45 | 66 | } | ... | ... |
src/test/java/net/ziemers/swxercise/ui/RestControllerTest.java renamed to src/test/java/net/ziemers/swxercise/ui/RestViewControllerTest.java
| ... | ... | @@ -7,10 +7,10 @@ import org.mockito.InjectMocks; |
| 7 | 7 | import org.mockito.junit.MockitoJUnitRunner; |
| 8 | 8 | |
| 9 | 9 | @RunWith(MockitoJUnitRunner.class) |
| 10 | -public class RestControllerTest { | |
| 10 | +public class RestViewControllerTest { | |
| 11 | 11 | |
| 12 | 12 | @InjectMocks |
| 13 | - private RestController underTest; | |
| 13 | + private RestViewController underTest; | |
| 14 | 14 | |
| 15 | 15 | @Test |
| 16 | 16 | public void test() { | ... | ... |