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