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