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-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 @@
+
+
+
+
+
+
+
+
+
+