diff --git a/gson-json-java/.gitignore b/gson-json-java/.gitignore new file mode 100644 index 00000000..2ddd19a8 --- /dev/null +++ b/gson-json-java/.gitignore @@ -0,0 +1,3 @@ +target +*.iml +.idea diff --git a/java-servlet-json/.gitignore b/java-servlet-json/.gitignore new file mode 100644 index 00000000..2ddd19a8 --- /dev/null +++ b/java-servlet-json/.gitignore @@ -0,0 +1,3 @@ +target +*.iml +.idea diff --git a/java-servlet-json/README.md b/java-servlet-json/README.md new file mode 100644 index 00000000..132b380b --- /dev/null +++ b/java-servlet-json/README.md @@ -0,0 +1 @@ +http://hmkcode.com/java-servlet-send-receive-json-using-jquery-ajax/ \ No newline at end of file diff --git a/java-servlet-json/modified.json b/java-servlet-json/modified.json new file mode 100644 index 00000000..c13d2846 --- /dev/null +++ b/java-servlet-json/modified.json @@ -0,0 +1 @@ +[{"title":"bbc","url":"news.bbc.co.uk","categories":["news"],"tags":["uk news"]},{"title":null,"url":"www.google.co.uk","categories":["youtube","gmail","gdrive"],"tags":["search"]}] \ No newline at end of file diff --git a/java-servlet-json/pom.xml b/java-servlet-json/pom.xml index dd7dc447..f38763fd 100644 --- a/java-servlet-json/pom.xml +++ b/java-servlet-json/pom.xml @@ -35,6 +35,18 @@ jackson-annotations 2.2.2 + + junit + junit-dep + 4.9 + + + junit + junit + + + + diff --git a/java-servlet-json/src/main/java/com/hmkcode/JSONServlet.java b/java-servlet-json/src/main/java/com/hmkcode/JSONServlet.java index afccf9b4..53de73a4 100644 --- a/java-servlet-json/src/main/java/com/hmkcode/JSONServlet.java +++ b/java-servlet-json/src/main/java/com/hmkcode/JSONServlet.java @@ -1,48 +1,48 @@ package com.hmkcode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.hmkcode.vo.Article; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.List; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.hmkcode.vo.Article; public class JSONServlet extends HttpServlet { - + private static final long serialVersionUID = 1L; // This will store all received articles List
articles = new LinkedList
(); - + /*************************************************** * URL: /jsonservlet * doPost(): receives JSON data, parse it, map it and send back as JSON ****************************************************/ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ - + // 1. get received JSON data from request BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream())); String json = ""; if(br != null){ json = br.readLine(); } - + // 2. initiate jackson mapper ObjectMapper mapper = new ObjectMapper(); - + // 3. Convert received JSON to Article Article article = mapper.readValue(json, Article.class); // 4. Set response type to JSON - response.setContentType("application/json"); - + response.setContentType("application/json"); + // 5. Add article to List
articles.add(article); diff --git a/java-servlet-json/src/main/java/com/hmkcode/vo/Article.java b/java-servlet-json/src/main/java/com/hmkcode/vo/Article.java index 81220d2c..77fb88f7 100644 --- a/java-servlet-json/src/main/java/com/hmkcode/vo/Article.java +++ b/java-servlet-json/src/main/java/com/hmkcode/vo/Article.java @@ -5,35 +5,10 @@ public class Article { - private String title; - private String url; - private List categories; - private List tags; - - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } - public String getUrl() { - return url; - } - public void setUrl(String url) { - this.url = url; - } - public List getCategories() { - return categories; - } - public void setCategories(List categories) { - this.categories = categories; - } - public List getTags() { - return tags; - } - public void setTags(List tags) { - this.tags = tags; - } + public String title; + public String url; + public List categories; + public List tags; public void addCategory(String category){ if(this.categories == null) diff --git a/java-servlet-json/src/test/java/com/hmkcode/ArticleMapperTest.java b/java-servlet-json/src/test/java/com/hmkcode/ArticleMapperTest.java new file mode 100644 index 00000000..9d4f355c --- /dev/null +++ b/java-servlet-json/src/test/java/com/hmkcode/ArticleMapperTest.java @@ -0,0 +1,86 @@ +package com.hmkcode;/** + * Author: wge + * Date: 22/11/2013 + * Time: 18:09 + */ + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.hmkcode.vo.Article; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + + +public class ArticleMapperTest +{ + private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(ArticleMapperTest.class.getName()); + + + @Test + public void testValidJson() throws Exception + { + String json = readlineFromResourceFile("/valid.json"); + + ObjectMapper mapper = new ObjectMapper(); + Article article = mapper.readValue(json, Article.class); + + assert(article.url.equals("news.bbc.co.uk")); + assert(article.categories.contains("news")); + assert(article.categories.size() == 1); + assert(article.tags.size() == 1); + assert(article.tags.contains("uk news")); + + List
articles = new ArrayList
(); + articles.add(article); + + Article extra = new Article(); + extra.url = "www.google.co.uk"; + List categoryList = new ArrayList(); + categoryList.add("youtube"); + categoryList.add("gmail"); + categoryList.add("gdrive"); + + extra.categories = categoryList; + extra.addTag("search"); + + articles.add(extra); + + //this will appear in the root of your project. + mapper.writeValue(new File("modified.json"), articles); + } + + @Test (expected=com.fasterxml.jackson.core.JsonParseException.class) + public void testBadInput() throws Exception + { + String json = readlineFromResourceFile("/malformed.json"); + ObjectMapper mapper = new ObjectMapper(); + Article article = mapper.readValue(json, Article.class); + } + + @Test + public void missingUrl() throws Exception + { + String json = readlineFromResourceFile("/missingUrl.json"); + ObjectMapper mapper = new ObjectMapper(); + Article article = mapper.readValue(json, Article.class); + assert(article.url == null); + assert(article.categories.contains("news")); + assert(article.categories.size() == 1); + assert(article.tags.size() == 1); + assert(article.tags.contains("uk news")); + + + } + + String readlineFromResourceFile(String filename) throws IOException + { + InputStream is = getClass().getResourceAsStream(filename); + byte[] buff = new byte[1000]; + is.read(buff); + return new String(buff); + } +} diff --git a/java-servlet-json/src/test/resources/malformed.json b/java-servlet-json/src/test/resources/malformed.json new file mode 100644 index 00000000..397480e2 --- /dev/null +++ b/java-servlet-json/src/test/resources/malformed.json @@ -0,0 +1 @@ +{"title":"bbc","url":news.bbc.co.uk,"categories":["news"],"tags":["uk news"]}; \ No newline at end of file diff --git a/java-servlet-json/src/test/resources/missingUrl.json b/java-servlet-json/src/test/resources/missingUrl.json new file mode 100644 index 00000000..182a4d59 --- /dev/null +++ b/java-servlet-json/src/test/resources/missingUrl.json @@ -0,0 +1 @@ +{"title":"bbc","categories":["news"],"tags":["uk news"]}; \ No newline at end of file diff --git a/java-servlet-json/src/test/resources/valid.json b/java-servlet-json/src/test/resources/valid.json new file mode 100644 index 00000000..ab4b4d7c --- /dev/null +++ b/java-servlet-json/src/test/resources/valid.json @@ -0,0 +1 @@ +{"title":"bbc","url":"news.bbc.co.uk","categories":["news"],"tags":["uk news"]}; \ No newline at end of file