diff --git a/spring-exception-controlleradvice/.classpath b/spring-exception-controlleradvice/.classpath
new file mode 100644
index 0000000..d67f3e2
--- /dev/null
+++ b/spring-exception-controlleradvice/.classpath
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-exception-controlleradvice/pom.xml b/spring-exception-controlleradvice/pom.xml
new file mode 100644
index 0000000..3086b49
--- /dev/null
+++ b/spring-exception-controlleradvice/pom.xml
@@ -0,0 +1,45 @@
+
+ 4.0.0
+
+ com.hmkcode
+ spring-exception-controlleradvice
+ 1.0-SNAPSHOT
+ jar
+
+ spring-boot
+ http://maven.apache.org
+
+
+ UTF-8
+ 1.8
+ 1.8
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.4.2
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.0.0
+
+ com.hmkcode.App
+
+
+
+
+
diff --git a/spring-exception-controlleradvice/src/main/java/com/hmkcode/App.java b/spring-exception-controlleradvice/src/main/java/com/hmkcode/App.java
new file mode 100644
index 0000000..c977ea6
--- /dev/null
+++ b/spring-exception-controlleradvice/src/main/java/com/hmkcode/App.java
@@ -0,0 +1,15 @@
+package com.hmkcode;
+
+import org.springframework.boot.*;
+import org.springframework.boot.autoconfigure.*;
+import org.springframework.stereotype.*;
+
+@Controller
+@SpringBootApplication
+public class App {
+
+
+ public static void main(String[] args) throws Exception {
+ SpringApplication.run(App.class, args);
+ }
+}
\ No newline at end of file
diff --git a/spring-exception-controlleradvice/src/main/java/com/hmkcode/controllers/Controller.java b/spring-exception-controlleradvice/src/main/java/com/hmkcode/controllers/Controller.java
new file mode 100644
index 0000000..f51e398
--- /dev/null
+++ b/spring-exception-controlleradvice/src/main/java/com/hmkcode/controllers/Controller.java
@@ -0,0 +1,21 @@
+package com.hmkcode.controllers;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@RestController
+public class Controller {
+
+
+ @RequestMapping("/ok")
+ public @ResponseBody String ok() throws Exception {
+ return "OK";
+ }
+
+ @RequestMapping("/exception")
+ public @ResponseBody String exception() throws Exception {
+ throw new Exception("Error");
+ }
+}
diff --git a/spring-exception-controlleradvice/src/main/java/com/hmkcode/exception/ControllerAdvisor.java b/spring-exception-controlleradvice/src/main/java/com/hmkcode/exception/ControllerAdvisor.java
new file mode 100644
index 0000000..027ab1f
--- /dev/null
+++ b/spring-exception-controlleradvice/src/main/java/com/hmkcode/exception/ControllerAdvisor.java
@@ -0,0 +1,26 @@
+package com.hmkcode.exception;
+
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.http.HttpStatus;
+
+@ControllerAdvice
+public class ControllerAdvisor {
+
+
+ @ExceptionHandler(Exception.class)
+ @ResponseStatus(HttpStatus.BAD_REQUEST)
+
+ public @ResponseBody String generalException(final Exception exception,
+ final HttpServletRequest request) {
+
+ return exception.getMessage()+" while calling: "+request.getRequestURI();
+
+ }
+}
+
diff --git a/spring-mvc-excel-view/README.md b/spring-mvc-excel-view/README.md
new file mode 100644
index 0000000..2397dc6
--- /dev/null
+++ b/spring-mvc-excel-view/README.md
@@ -0,0 +1,5 @@
+Spring MVC | Excel View Resolver
+================================
+
+
+Spring MVC can render retrieved data into views of different format such as PDF, JSP or Excel. Spring framework view resolvers e.g. `InternalResourceViewResolver`, `XmlViewResolver`, `ResourceBundleViewResolver` and a few others enable you to render model into views. This post shows you how to render model into Excel view using XmlViewResolver.
diff --git a/spring-mvc-excel-view/pom.xml b/spring-mvc-excel-view/pom.xml
new file mode 100644
index 0000000..2c7f2c8
--- /dev/null
+++ b/spring-mvc-excel-view/pom.xml
@@ -0,0 +1,97 @@
+
+ 4.0.0
+
+ com.hmkcode
+ spring-mvc-excel-view
+ 1.0-SNAPSHOT
+ war
+
+ spring-mvc-excel-view
+ http://maven.apache.org
+
+
+ UTF-8
+ 4.3.14.RELEASE
+ 3.17
+
+
+
+
+
+
+
+ org.springframework
+ spring-context
+ ${spring.version}
+
+
+
+ org.springframework
+ spring-core
+ ${spring.version}
+
+
+
+ org.springframework
+ spring-beans
+ ${spring.version}
+
+
+
+ org.springframework
+ spring-web
+ ${spring.version}
+
+
+
+ org.springframework
+ spring-webmvc
+ ${spring.version}
+
+
+
+ org.springframework
+ spring-expression
+ ${spring.version}
+
+
+
+
+ commons-logging
+ commons-logging
+ 1.2
+
+
+
+
+ org.apache.poi
+ poi
+ ${poi.version}
+
+
+ org.apache.poi
+ poi-ooxml
+ ${poi.version}
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 4.0.0
+ provided
+
+
+
+
+
+
+
+
+ org.eclipse.jetty
+ jetty-maven-plugin
+ 9.4.8.v20171121
+
+
+
+
diff --git a/spring-mvc-excel-view/src/main/java/com/hmkcode/controllers/Controller.java b/spring-mvc-excel-view/src/main/java/com/hmkcode/controllers/Controller.java
new file mode 100644
index 0000000..1a5c76c
--- /dev/null
+++ b/spring-mvc-excel-view/src/main/java/com/hmkcode/controllers/Controller.java
@@ -0,0 +1,28 @@
+package com.hmkcode.controllers;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.hmkcode.model.Link;
+
+@RestController
+public class Controller {
+
+ @RequestMapping(value = "/viewExcel", method = RequestMethod.GET)
+ public ModelAndView getExcel(){
+ System.out.println("getExcel!");
+
+ List links = new LinkedList();
+ links.add(new Link("Android", "android.com"));
+ links.add(new Link("Spring", "spring.io"));
+ links.add(new Link("Firebase", "firebase.com"));
+
+ return new ModelAndView("ExcelXlsxView", "model", links);
+ }
+
+}
diff --git a/spring-mvc-excel-view/src/main/java/com/hmkcode/model/Link.java b/spring-mvc-excel-view/src/main/java/com/hmkcode/model/Link.java
new file mode 100644
index 0000000..4e7755b
--- /dev/null
+++ b/spring-mvc-excel-view/src/main/java/com/hmkcode/model/Link.java
@@ -0,0 +1,32 @@
+package com.hmkcode.model;
+
+public class Link {
+
+ private String title;
+ private String url;
+
+ public Link(String title, String url){
+ this.title = title;
+ this.url = url;
+ }
+ 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;
+ }
+ @Override
+ public String toString() {
+ return "Link [title=" + title + ", url=" + url + "]";
+ }
+
+
+
+
+}
diff --git a/spring-mvc-excel-view/src/main/java/com/hmkcode/view/ExcelXlsxView.java b/spring-mvc-excel-view/src/main/java/com/hmkcode/view/ExcelXlsxView.java
new file mode 100644
index 0000000..335bb0e
--- /dev/null
+++ b/spring-mvc-excel-view/src/main/java/com/hmkcode/view/ExcelXlsxView.java
@@ -0,0 +1,42 @@
+package com.hmkcode.view;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.web.servlet.view.document.AbstractXlsxView;
+
+import com.hmkcode.model.Link;
+
+public class ExcelXlsxView extends AbstractXlsxView {
+
+ @Override
+ protected void buildExcelDocument(Map model,
+ Workbook workbook,
+ HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+
+ @SuppressWarnings("unchecked")
+ List links = (List) model.get("model");
+
+ // create a new Excel sheet
+ Sheet sheet = workbook.createSheet("Sheet");
+
+ int i = 0;
+ Row row = null;
+ for(Link link:links){
+ row = sheet.createRow(i++);
+ row.createCell(0).setCellValue(link.getTitle());
+ row.createCell(1).setCellValue(link.getUrl());
+ }
+
+
+
+ }
+
+}
diff --git a/spring-mvc-excel-view/src/main/webapp/WEB-INF/rest-servlet.xml b/spring-mvc-excel-view/src/main/webapp/WEB-INF/rest-servlet.xml
new file mode 100644
index 0000000..38e2d35
--- /dev/null
+++ b/spring-mvc-excel-view/src/main/webapp/WEB-INF/rest-servlet.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-mvc-excel-view/src/main/webapp/WEB-INF/views.xml b/spring-mvc-excel-view/src/main/webapp/WEB-INF/views.xml
new file mode 100644
index 0000000..52a9578
--- /dev/null
+++ b/spring-mvc-excel-view/src/main/webapp/WEB-INF/views.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-excel-view/src/main/webapp/WEB-INF/web.xml b/spring-mvc-excel-view/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..a3148c4
--- /dev/null
+++ b/spring-mvc-excel-view/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,25 @@
+
+
+ SPRING MVC
+
+ index.html
+
+
+
+
+ rest
+ org.springframework.web.servlet.DispatcherServlet
+
+
+ rest
+ /rest/*
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-excel-view/src/main/webapp/index.html b/spring-mvc-excel-view/src/main/webapp/index.html
new file mode 100644
index 0000000..02acce6
--- /dev/null
+++ b/spring-mvc-excel-view/src/main/webapp/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+Excel View Resolver
+
+
+ Spring MVC | Excel View Resolver
+View Excel
+
+
\ No newline at end of file
diff --git a/spring-mvc-test/.classpath b/spring-mvc-test/.classpath
new file mode 100644
index 0000000..3003973
--- /dev/null
+++ b/spring-mvc-test/.classpath
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-test/pom.xml b/spring-mvc-test/pom.xml
new file mode 100644
index 0000000..f7b699a
--- /dev/null
+++ b/spring-mvc-test/pom.xml
@@ -0,0 +1,126 @@
+
+ 4.0.0
+
+ com.hmkcode
+ spring-mvc-test
+ 1.0-SNAPSHOT
+ war
+
+ spring-mvc-test
+ http://maven.apache.org
+
+
+ UTF-8
+ 5.0.8.RELEASE
+ 4.12
+ 4.0.1
+ 2.9.6
+
+
+
+
+
+
+
+ org.springframework
+ spring-context
+ ${spring.version}
+
+
+
+ org.springframework
+ spring-core
+ ${spring.version}
+
+
+
+ org.springframework
+ spring-beans
+ ${spring.version}
+
+
+
+ org.springframework
+ spring-web
+ ${spring.version}
+
+
+
+ org.springframework
+ spring-webmvc
+ ${spring.version}
+
+
+
+ org.springframework
+ spring-expression
+ ${spring.version}
+
+
+ org.springframework
+ spring-test
+ ${spring.version}
+ test
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+
+ junit
+ junit
+ ${junit.version}
+ test
+
+
+
+
+ commons-logging
+ commons-logging
+ 1.2
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ ${javax.servlet.version}
+ provided
+
+
+
+
+ org.hamcrest
+ hamcrest-library
+ 1.3
+ test
+
+
+ com.jayway.jsonpath
+ json-path
+ 2.2.0
+ test
+
+
+
+
+
+
+
+ org.eclipse.jetty
+ jetty-maven-plugin
+ 9.4.11.v20180605
+
+
+
+
diff --git a/spring-mvc-test/src/main/java/com/hmkcode/controllers/Controller.java b/spring-mvc-test/src/main/java/com/hmkcode/controllers/Controller.java
new file mode 100644
index 0000000..710db0f
--- /dev/null
+++ b/spring-mvc-test/src/main/java/com/hmkcode/controllers/Controller.java
@@ -0,0 +1,27 @@
+package com.hmkcode.controllers;
+
+
+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.RestController;
+
+import com.hmkcode.model.Link;
+
+@RestController
+@RequestMapping("api")
+public class Controller {
+
+ @RequestMapping(value = "/get", method = RequestMethod.GET)
+ public @ResponseBody Link get(){
+ System.out.println("Get!");
+
+ Link link = new Link();
+ link.setTitle("HMKCODE BLOG!");
+ link.setUrl("hmkcode.com");
+
+ return link;
+
+ }
+
+}
diff --git a/spring-mvc-test/src/main/java/com/hmkcode/model/Link.java b/spring-mvc-test/src/main/java/com/hmkcode/model/Link.java
new file mode 100644
index 0000000..d3a1548
--- /dev/null
+++ b/spring-mvc-test/src/main/java/com/hmkcode/model/Link.java
@@ -0,0 +1,31 @@
+package com.hmkcode.model;
+
+public class Link {
+
+ private String title;
+ private String url;
+
+ public Link(){
+
+ }
+ public Link(String title, String url){
+ this.title = title;
+ this.url = url;
+ }
+ 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;
+ }
+ @Override
+ public String toString() {
+ return "Link [title=" + title + ", url=" + url + "]";
+ }
+}
diff --git a/spring-mvc-test/src/main/webapp/WEB-INF/rest-servlet.xml b/spring-mvc-test/src/main/webapp/WEB-INF/rest-servlet.xml
new file mode 100644
index 0000000..8072b08
--- /dev/null
+++ b/spring-mvc-test/src/main/webapp/WEB-INF/rest-servlet.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
diff --git a/spring-mvc-test/src/main/webapp/WEB-INF/web.xml b/spring-mvc-test/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..a3148c4
--- /dev/null
+++ b/spring-mvc-test/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,25 @@
+
+
+ SPRING MVC
+
+ index.html
+
+
+
+
+ rest
+ org.springframework.web.servlet.DispatcherServlet
+
+
+ rest
+ /rest/*
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-test/src/main/webapp/index.html b/spring-mvc-test/src/main/webapp/index.html
new file mode 100644
index 0000000..c0533a2
--- /dev/null
+++ b/spring-mvc-test/src/main/webapp/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+Spring MVC Test
+
+
+ Spring MVC Test | MockMVC
+GET JSON
+
+
\ No newline at end of file
diff --git a/spring-mvc-test/src/test/java/com/hmkcode/test/TestController.java b/spring-mvc-test/src/test/java/com/hmkcode/test/TestController.java
new file mode 100644
index 0000000..93a8614
--- /dev/null
+++ b/spring-mvc-test/src/test/java/com/hmkcode/test/TestController.java
@@ -0,0 +1,53 @@
+package com.hmkcode.test;
+
+import javax.servlet.ServletContext;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.mock.web.MockServletContext;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.web.context.WebApplicationContext;
+
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = "/rest-servlet.xml")
+@WebAppConfiguration
+public class TestController {
+
+ @Autowired
+ private WebApplicationContext wac;
+
+ private MockMvc mockMvc;
+ @Before
+ public void setup() throws Exception {
+ this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
+ }
+ @Ignore
+ @Test
+ public void configTest() {
+ ServletContext servletContext = wac.getServletContext();
+
+ Assert.assertNotNull(servletContext);
+ Assert.assertTrue(servletContext instanceof MockServletContext);
+ Assert.assertNotNull(wac.getBean("controller"));
+ }
+
+ @Test
+ public void test() throws Exception{
+ this.mockMvc.perform(get("/api/get"))
+ .andExpect(status().isOk())
+ .andDo(print());
+
+ }
+}
diff --git a/spring-mvc-test/src/test/resources/rest-servlet.xml b/spring-mvc-test/src/test/resources/rest-servlet.xml
new file mode 100644
index 0000000..88698ec
--- /dev/null
+++ b/spring-mvc-test/src/test/resources/rest-servlet.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+