diff --git a/.gitignore b/.gitignore
index 1fac4d5..6f633d8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,4 +40,5 @@ bin/
.vscode/
### Mac OS ###
-.DS_Store
\ No newline at end of file
+.DS_Store
+.omx/
diff --git a/.idea/copilot.data.migration.ask2agent.xml b/.idea/copilot.data.migration.ask2agent.xml
new file mode 100644
index 0000000..1f2ea11
--- /dev/null
+++ b/.idea/copilot.data.migration.ask2agent.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 14746e7..2a65317 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -1,5 +1,6 @@
+
\ No newline at end of file
diff --git a/src/main/java/com/diy/framework/context/RestController.java b/src/main/java/com/diy/framework/context/RestController.java
new file mode 100644
index 0000000..d9e611b
--- /dev/null
+++ b/src/main/java/com/diy/framework/context/RestController.java
@@ -0,0 +1,12 @@
+package com.diy.framework.context;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Component
+public @interface RestController {
+}
diff --git a/src/main/java/com/diy/framework/web/DispatcherServlet.java b/src/main/java/com/diy/framework/web/DispatcherServlet.java
index 4f69a02..a7fb9ca 100644
--- a/src/main/java/com/diy/framework/web/DispatcherServlet.java
+++ b/src/main/java/com/diy/framework/web/DispatcherServlet.java
@@ -1,9 +1,11 @@
package com.diy.framework.web;
import com.diy.framework.context.HandlerMethod;
+import com.diy.framework.context.RestController;
import com.diy.framework.web.beans.factory.BeanFactory;
import com.diy.framework.web.mvc.ModelAndView;
import com.diy.framework.web.mvc.controller.HandlerMapping;
+import com.diy.framework.web.mvc.json.JsonResponseWriter;
import com.diy.framework.web.mvc.view.JspViewResolver;
import com.diy.framework.web.mvc.view.ViewResolver;
@@ -23,6 +25,7 @@ public class DispatcherServlet extends HttpServlet {
private HandlerMapping handlerMapping;
private final ViewResolver viewResolver = new JspViewResolver();
+ private final JsonResponseWriter jsonResponseWriter = new JsonResponseWriter();
@Override
public void init() throws ServletException {
@@ -57,11 +60,15 @@ private void execute(Object handler, HttpServletRequest req, HttpServletResponse
if (handler instanceof HandlerMethod handlerMap) {
Object controller = ((HandlerMethod) handler).getBean();
+ Class> controllerClass = controller.getClass();
Method method = ((HandlerMethod) handler).getMethod();
// Reflection 으로 메서드 실행
Object result = method.invoke(controller, req, resp);
- if (result instanceof ModelAndView modelAndView) {
+
+ if (controllerClass.isAnnotationPresent(RestController.class)) {
+ jsonResponseWriter.write(resp, result);
+ } else if (result instanceof ModelAndView modelAndView) {
viewResolver.resolveViewName(modelAndView.getViewName()).render(req, resp, modelAndView.getModel());
}
}
diff --git a/src/main/java/com/diy/framework/web/mvc/json/JsonResponseWriter.java b/src/main/java/com/diy/framework/web/mvc/json/JsonResponseWriter.java
new file mode 100644
index 0000000..da5cc58
--- /dev/null
+++ b/src/main/java/com/diy/framework/web/mvc/json/JsonResponseWriter.java
@@ -0,0 +1,23 @@
+package com.diy.framework.web.mvc.json;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/*
+ * Json 응답을 만들기 위한 클래스
+ * */
+public class JsonResponseWriter {
+
+ private static ObjectMapper objectMapper = new ObjectMapper();
+
+ public void write(HttpServletResponse response, Object object) throws IOException {
+ response.setContentType("application/json; charset=UTF-8");
+ String json = objectMapper.writeValueAsString(object);
+ response.getWriter().write(json);
+ }
+}