diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..06a27ad --- /dev/null +++ b/pom.xml @@ -0,0 +1,62 @@ + + + 4.0.0 + + de.lusiardi + webbasics1 + 1.0-SNAPSHOT + war + + Java Webprogrammierung mit Spring und Maven (Teil 3) + + 3.0 + + + + UTF-8 + + + + + + org.springframework + spring-webmvc + 3.2.4.RELEASE + jar + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + + org.codehaus.jackson + jackson-mapper-asl + 1.9.12 + jar + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.6 + 1.6 + + + + + + diff --git a/src/main/java/de/lusiardi/testprojekt/controller/RestController.java b/src/main/java/de/lusiardi/testprojekt/controller/RestController.java new file mode 100644 index 0000000..32871bf --- /dev/null +++ b/src/main/java/de/lusiardi/testprojekt/controller/RestController.java @@ -0,0 +1,76 @@ +package de.lusiardi.testprojekt.controller; + +import de.lusiardi.testprojekt.dto.PersonCreateDto; +import de.lusiardi.testprojekt.dto.PersonDto; +import de.lusiardi.testprojekt.exceptions.ResourceNotFoundException; +import java.util.ArrayList; +import java.util.List; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +@Controller +public class RestController { + + private List persons = new ArrayList(); + + @RequestMapping(value = "persons", method = RequestMethod.GET) + @ResponseBody + public List getPersons() { + return persons; + } + + @RequestMapping(value = "persons", method = RequestMethod.POST) + @ResponseBody + @ResponseStatus(HttpStatus.CREATED) + public PersonDto createPerson(@RequestBody PersonCreateDto in) { + PersonDto person = new PersonDto(in.getName(), in.getEmail()); + persons.add(person); + return person; + } + + @RequestMapping(value = "persons/{id}", method = RequestMethod.GET) + @ResponseBody + public PersonDto getPerson(@PathVariable(value = "id") int id) { + for (PersonDto person : persons) { + if (id == person.getId()) { + return person; + } + } + throw new ResourceNotFoundException(); + } + + @RequestMapping(value = "persons/{id}", method = RequestMethod.DELETE) + @ResponseBody + public boolean deletePerson(@PathVariable(value = "id") int id) { + PersonDto toDelete = null; + for (PersonDto person : persons) { + if (id == person.getId()) { + toDelete = person; + } + } + if (toDelete != null) { + return persons.remove(toDelete); + } else { + throw new ResourceNotFoundException(); + } + } + + @RequestMapping(value = "persons/{id}", method = RequestMethod.PUT) + @ResponseBody + public PersonDto updatePerson(@PathVariable(value = "id") int id, @RequestBody PersonCreateDto in) { + PersonDto toUpdate = null; + for (PersonDto person : persons) { + if (id == person.getId()) { + toUpdate = person; + } + } + if (toUpdate != null) { + toUpdate.setEmail(in.getEmail()); + toUpdate.setName(in.getName()); + return toUpdate; + } else { + throw new ResourceNotFoundException(); + } + } +} \ No newline at end of file diff --git a/src/main/java/de/lusiardi/testprojekt/dto/PersonCreateDto.java b/src/main/java/de/lusiardi/testprojekt/dto/PersonCreateDto.java new file mode 100644 index 0000000..e4d39e0 --- /dev/null +++ b/src/main/java/de/lusiardi/testprojekt/dto/PersonCreateDto.java @@ -0,0 +1,66 @@ +package de.lusiardi.testprojekt.dto; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement // for jaxb +public class PersonCreateDto { + + private String name; + private String email; + + /* + * de.lusiardi.testprojekt.dto.TestDto does not have a no-arg default + * constructor. this problem is related to the following location: + * at de.lusiardi.testprojekt.dto.TestDto + */ + public PersonCreateDto() { + } + + public PersonCreateDto(String name, String email) { + this.name = name; + this.email = email; + } + + public String getName() { + return name; + } + + public void setName(String foo) { + this.name = foo; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public int hashCode() { + int hash = 3; + hash = 37 * hash + (this.name != null ? this.name.hashCode() : 0); + hash = 37 * hash + (this.email != null ? this.email.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final PersonCreateDto other = (PersonCreateDto) obj; + if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) { + return false; + } + if ((this.email == null) ? (other.email != null) : !this.email.equals(other.email)) { + return false; + } + return true; + } + +} diff --git a/src/main/java/de/lusiardi/testprojekt/dto/PersonDto.java b/src/main/java/de/lusiardi/testprojekt/dto/PersonDto.java new file mode 100644 index 0000000..02def98 --- /dev/null +++ b/src/main/java/de/lusiardi/testprojekt/dto/PersonDto.java @@ -0,0 +1,75 @@ +package de.lusiardi.testprojekt.dto; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement // for jaxb +public class PersonDto { + + private static int idCounter = 0; + private int id; + private String name; + private String email; + + /* + * de.lusiardi.testprojekt.dto.TestDto does not have a no-arg default + * constructor. this problem is related to the following location: + * at de.lusiardi.testprojekt.dto.TestDto + */ + public PersonDto() { + } + + public PersonDto(String name, String email) { + this.id = idCounter; + idCounter++; + this.name = name; + this.email = email; + } + + public String getName() { + return name; + } + + public void setName(String foo) { + this.name = foo; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 59 * hash + this.id; + hash = 59 * hash + (this.name != null ? this.name.hashCode() : 0); + hash = 59 * hash + (this.email != null ? this.email.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final PersonDto other = (PersonDto) obj; + if (this.id != other.id) { + return false; + } + return true; + } +} diff --git a/src/main/java/de/lusiardi/testprojekt/exceptions/ResourceNotFoundException.java b/src/main/java/de/lusiardi/testprojekt/exceptions/ResourceNotFoundException.java new file mode 100644 index 0000000..fd7b526 --- /dev/null +++ b/src/main/java/de/lusiardi/testprojekt/exceptions/ResourceNotFoundException.java @@ -0,0 +1,12 @@ +package de.lusiardi.testprojekt.exceptions; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +/** + * This Exception will be mapped to a 404 result. Reason will be written on the + * exeption page. + */ +@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "Some static reason") +public class ResourceNotFoundException extends RuntimeException { +} diff --git a/src/main/webapp/META-INF/context.xml b/src/main/webapp/META-INF/context.xml new file mode 100644 index 0000000..a69abe7 --- /dev/null +++ b/src/main/webapp/META-INF/context.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/spring-servlet.xml b/src/main/webapp/WEB-INF/spring-servlet.xml new file mode 100644 index 0000000..7c4709b --- /dev/null +++ b/src/main/webapp/WEB-INF/spring-servlet.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..f6daba4 --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,28 @@ + + + + WebBasics3 + + + index.jsp + + + + spring + org.springframework.web.servlet.DispatcherServlet + 1 + + + + + spring + /rest/* + + + \ No newline at end of file diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp new file mode 100644 index 0000000..47a57e3 --- /dev/null +++ b/src/main/webapp/index.jsp @@ -0,0 +1,12 @@ +<%@page contentType="text/html" pageEncoding="UTF-8"%> + + + + + REST Service + + +

REST Service

+ + \ No newline at end of file