diff --git a/data/dataxml/uac.service.board.qna.list_GET.xml b/data/dataxml/uac.service.board.qna.list_GET.xml
new file mode 100644
index 00000000..e2289653
--- /dev/null
+++ b/data/dataxml/uac.service.board.qna.list_GET.xml
@@ -0,0 +1,94 @@
+
+
+
+ S
+ 성공적으로 조회되었습니다.
+ 10
+ 1
+ 15
+
+ 1
+ 101
+ 공지사항 테스트
+ 55
+ 2021-07-19
+
+
+ 2
+ 101
+ 공지사항 테스트
+ 55
+ 2021-07-19
+
+
+ 3
+ 101
+ 공지사항 테스트
+ 55
+ 2021-07-19
+
+
+ 4
+ 101
+ 공지사항 테스트
+ 55
+ 2021-07-19
+
+
+ 5
+ 101
+ 공지사항 테스트
+ 55
+ 2021-07-19
+
+
+ 6
+ 101
+ 공지사항 테스트
+ 55
+ 2021-07-19
+
+
+ 7
+ 101
+ 공지사항 테스트
+ 55
+ 2021-07-19
+
+
+ 8
+ 101
+ 공지사항 테스트
+ 55
+ 2021-07-19
+
+
+ 9
+ 101
+ 공지사항 테스트
+ 55
+ 2021-07-19
+
+
+ 10
+ 101
+ 공지사항 테스트
+ 55
+ 2021-07-19
+
+
+ 11
+ 101
+ 공지사항 테스트
+ 55
+ 2021-07-19
+
+
+ 12
+ 101
+ 공지사항 테스트
+ 55
+ 2021-07-19
+
+
+
diff --git a/src/main/java/nlib/bbs/service/BoardService.java b/src/main/java/nlib/bbs/service/BoardService.java
index 4d7497cb..1a19b390 100644
--- a/src/main/java/nlib/bbs/service/BoardService.java
+++ b/src/main/java/nlib/bbs/service/BoardService.java
@@ -4,6 +4,28 @@ package nlib.bbs.service;
import nlib.restful.service.DataApiReqVO;
import nlib.restful.service.DataApiResVO;
+/**
+ *
+ * @Class Name : BoardService.java
+ *
+ * @Description : 게시물 관리 클래스
+ *
+ *
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ *
+ *
+ * @ ------------ -------- ---------------------------
+ * @ 수정일 수정자 수정내용
+ * @ ------------ -------- ---------------------------
+ * @ 2021. 7. 19. KNKIM 최초 생성
+ *
+ *
+ * @author 이씨플라자 * DIGITALSHIP KNKIM
+ * @since 2021. 7. 19.
+ * @version 1.0
+ *
+ */
public interface BoardService
{
public DataApiResVO listNotices(DataApiReqVO reqVO);
@@ -12,6 +34,12 @@ public interface BoardService
public DataApiResVO listFAQs(DataApiReqVO reqVO);
+ /**
+ * 묻고답하기 목록 조회한다.
+ *
+ * @param reqVO
+ * @return
+ */
public DataApiResVO listQnAs(DataApiReqVO reqVO);
public DataApiResVO selectQnA(DataApiReqVO reqVO);
diff --git a/src/main/java/nlib/bbs/service/impl/BoardDAO.java b/src/main/java/nlib/bbs/service/impl/BoardDAO.java
index 4eca6c94..321c64e0 100644
--- a/src/main/java/nlib/bbs/service/impl/BoardDAO.java
+++ b/src/main/java/nlib/bbs/service/impl/BoardDAO.java
@@ -14,7 +14,12 @@ import nlib.restful.service.DataApiResVO;
public class BoardDAO extends DataApi
{
private static final Logger log = LoggerFactory.getLogger(BoardDAO.class);
-
+
+ /**
+ * 주 자원의 URI
+ */
+ public static final String RESOURCE_URI = "/uac/service/board/qna";
+
public DataApiResVO listNotices(DataApiReqVO reqVO) {
return null;
}
@@ -27,8 +32,15 @@ public class BoardDAO extends DataApi
return null;
}
+ /**
+ * 묻고답하기 목록 조회한다.
+ *
+ * @param reqVO
+ * @return
+ */
public DataApiResVO listQnAs(DataApiReqVO reqVO) {
- return null;
+ reqVO.setReqUrl(RESOURCE_URI + "/list");
+ return get(reqVO);
}
public DataApiResVO selectQnA(DataApiReqVO reqVO) {
diff --git a/src/main/java/nlib/bbs/service/impl/BoardServiceImpl.java b/src/main/java/nlib/bbs/service/impl/BoardServiceImpl.java
index 73a3b1f6..833cb950 100644
--- a/src/main/java/nlib/bbs/service/impl/BoardServiceImpl.java
+++ b/src/main/java/nlib/bbs/service/impl/BoardServiceImpl.java
@@ -32,8 +32,14 @@ public class BoardServiceImpl implements BoardService
return null;
}
+ /*
+ * 묻고답하기 목록 조회한다.
+ *
+ * (non-Javadoc)
+ * @see nlib.bbs.service.BoardService#listQnAs(nlib.restful.service.DataApiReqVO)
+ */
public DataApiResVO listQnAs(DataApiReqVO reqVO) {
- return null;
+ return boardDAO.listQnAs(reqVO);
}
public DataApiResVO selectQnA(DataApiReqVO reqVO) {
diff --git a/src/main/java/nlib/bbs/web/BoardController.java b/src/main/java/nlib/bbs/web/BoardController.java
index 9f0e97a3..d42757b1 100644
--- a/src/main/java/nlib/bbs/web/BoardController.java
+++ b/src/main/java/nlib/bbs/web/BoardController.java
@@ -1,32 +1,40 @@
package nlib.bbs.web;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
+import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import egovframework.com.cmm.service.FileVO;
import nlib.bbs.service.BoardService;
+import nlib.cmm.NlibCommonController;
+import nlib.restful.service.DataApiReqVO;
+import nlib.restful.service.DataApiResVO;
@Controller
-public class BoardController
+public class BoardController extends NlibCommonController
{
private static final Logger log = LoggerFactory.getLogger(BoardController.class);
@Resource(name = "boardService")
private BoardService boardService;
+ @Autowired
+ private AuthenticationManager authenticationManager;
/**
* 공지사항 목록 조회한다.
@@ -34,8 +42,10 @@ public class BoardController
* @param req
* @return
*/
+ @SuppressWarnings("deprecation")
@RequestMapping("/board/listNotices.do")
public String listNotices(HttpServletRequest req) {
+
return "nlib/board/listNotices";
}
@@ -61,16 +71,56 @@ public class BoardController
}
/**
- * 묻고답하기 목록 조회한다.
+ * 묻고답하기 목록 조회 화면을 구성한다.
*
* @param req
* @return
*/
@RequestMapping("/board/listQnAs.do")
- public String listQnAs(HttpServletRequest req) {
+ public String listQnAs(HttpServletRequest req, Authentication authentication, @RequestParam Map commandMap, ModelMap model) {
+
return "nlib/board/listQnAs";
}
+ /**
+ * 묻고답하기 목록 조회한다.
+ *
+ * @param req
+ * @return
+ */
+ @RequestMapping(value="/board/listQnAsAjax.do")
+ public ResponseEntity listQnAsAjax(HttpServletRequest req,
+ Authentication authentication, @RequestBody Map paramMap) {
+
+ String searchKeyword = paramMap.get("searchKeyword");
+ String pageNo = paramMap.get("pageNo");
+ String pageRows = paramMap.get("pageRows");
+
+ log.debug("listQnAs > pageNo = " + pageNo);
+ log.debug("listQnAs > pageRows = " + pageRows);
+ log.debug("listQnAs > keyword = " + searchKeyword);
+
+ //-------------------------------
+ // REQ VO 구성
+ //-------------------------------
+ DataApiReqVO reqVO = new DataApiReqVO();
+ reqVO.setAuthKey(getAuthKey(authentication));
+ reqVO.setPageNo(pageNo);
+ reqVO.setPageRows(pageRows);
+
+ // 추가 정보 설정
+ HashMap info = new HashMap();
+ info.put("keyword", searchKeyword);
+ reqVO.setInfo(info);
+
+ // 요청
+ DataApiResVO resVO = boardService.listQnAs(reqVO);
+
+ // JSON변환 응답 처리
+ return makeResponseEntityJson(resVO);
+ }
+
+
/**
* 묻고답하기 상세 내용 조회한다.
*
diff --git a/src/main/java/nlib/cmm/NlibCommonController.java b/src/main/java/nlib/cmm/NlibCommonController.java
new file mode 100644
index 00000000..55b5c029
--- /dev/null
+++ b/src/main/java/nlib/cmm/NlibCommonController.java
@@ -0,0 +1,64 @@
+package nlib.cmm;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.core.Authentication;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import nlib.bbs.web.BoardController;
+import nlib.cmm.exception.ErrorMessage;
+import nlib.restful.service.DataApiResVO;
+import nlib.security.SecUserVO;
+import nlib.user.service.NlibLoginVO;
+
+public class NlibCommonController {
+
+ private static final Logger log = LoggerFactory.getLogger(BoardController.class);
+ static final String ANONYMOUS_AUTH_KEY = "ANONYMOUS_AUTH_KEY_NONE";
+
+ public NlibLoginVO getNlibLoginVO(Authentication authentication) {
+ if(authentication == null) return null;
+
+ return (NlibLoginVO)authentication.getPrincipal();
+ }
+
+ public SecUserVO getSecLoginVO(Authentication authentication) {
+
+ if(authentication == null) return null;
+
+ return (SecUserVO)authentication.getPrincipal();
+ }
+
+ public String getAuthKey(Authentication authentication) {
+ if(authentication == null) return ANONYMOUS_AUTH_KEY;
+
+ return ((NlibLoginVO)authentication.getPrincipal()).getAuthKey();
+ }
+
+ public ResponseEntity makeResponseEntityJson(DataApiResVO resVO) {
+
+ // Convert Json
+ ObjectMapper mapper = new ObjectMapper();
+ String jsonStr = null;
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.add(HttpHeaders.CONTENT_TYPE, "application/json; charset=UTF-8");
+
+ try {
+ jsonStr = mapper.writeValueAsString(resVO);
+ log.debug("RETURN DATA > json:" + jsonStr);
+ } catch (JsonProcessingException e) {
+ ErrorMessage eMsg = new ErrorMessage("ERR_JSON_CONVERT", "응답객체를 JSON으로 변환 처리 중 오류가 발생하였습니다. : " + e.toString());
+ try { jsonStr = mapper.writeValueAsString(eMsg); } catch (JsonProcessingException ee) {}
+ e.printStackTrace();
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).headers(headers).body(jsonStr);
+ }
+
+ return ResponseEntity.ok().headers(headers).body(jsonStr);
+ }
+}
diff --git a/src/main/java/nlib/restful/service/DataApiInterface.java b/src/main/java/nlib/restful/service/DataApiInterface.java
index 7f4d1cf8..71160de1 100644
--- a/src/main/java/nlib/restful/service/DataApiInterface.java
+++ b/src/main/java/nlib/restful/service/DataApiInterface.java
@@ -26,7 +26,7 @@ import nlib.util.StringUtil;
*
*
* @ ------------ -------- ---------------------------
- * @ 수정일 수정자 수정내용
+ * @ 수정일 수정자 수정내용
* @ ------------ -------- ---------------------------
* @ 2021. 7. 9. KNKIM 최초 생성
*
@@ -114,6 +114,11 @@ public interface DataApiInterface {
}
}
+ // 요청 파라메타 확인
+ for(String key : map.keySet()) {
+ log.debug("MultiValueMap > " + key + "=" + map.get(key));
+ }
+
return map;
}
diff --git a/src/main/java/nlib/restful/service/XmlConverter.java b/src/main/java/nlib/restful/service/XmlConverter.java
new file mode 100644
index 00000000..e869fe39
--- /dev/null
+++ b/src/main/java/nlib/restful/service/XmlConverter.java
@@ -0,0 +1,79 @@
+package nlib.restful.service;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.util.HashMap;
+
+import javax.xml.stream.XMLEventReader;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.events.StartElement;
+import javax.xml.stream.events.XMLEvent;
+
+public class XmlConverter {
+
+ @SuppressWarnings("restriction")
+ public static void main(String argv[]) {
+
+ String inputFile = "C:/iams/workspace/nlib/data/dataxml/uac.service.board.qna.list_GET.xml";
+ HashMap resMap = new HashMap();
+
+ try {
+ // First create a new XMLInputFactory
+ XMLInputFactory inputFactory = XMLInputFactory.newInstance();
+ // Setup a new eventReader
+ InputStream in = new FileInputStream(inputFile);
+ XMLEventReader eventReader = inputFactory.createXMLEventReader(in);
+ // Read the XML document
+
+ int depth = 0;
+ StartElement startElement = null;
+
+ while (eventReader.hasNext()) {
+ XMLEvent event = eventReader.nextEvent();
+ System.out.println(" -> " + event);
+ String elementName = null;
+ String elementValue = null;
+ HashMap elementValues = null;
+
+ if (event.isStartElement()) {
+
+ startElement = event.asStartElement();
+
+ if (startElement.getName().getLocalPart().equals("result")) {
+ depth++;
+
+ event = eventReader.nextEvent();
+ System.out.println(" > " + event);
+
+ // result의 하위 엘리먼트 시작 찾기
+ while (!event.isStartElement()) {
+ event = eventReader.nextEvent();
+ System.out.println(" 하위엘리먼트 시작전: " + event);
+ }
+
+ while (!event.isEndElement()) {
+ if (event.isCharacters()) {
+ String content = event.asCharacters().getData();
+ System.out.println("content: -" + content + "_");
+ }
+ event = eventReader.nextEvent();
+ System.out.println(" >> " + event);
+ }
+
+ event = eventReader.nextEvent();
+ System.out.println(" >>> " + event);
+
+ continue;
+ }
+
+ }
+ }
+ } catch (FileNotFoundException e) {
+ System.out.println("File not Found: " + inputFile);
+ } catch (XMLStreamException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/resources/egovframework/spring/context-common.xml b/src/main/resources/egovframework/spring/context-common.xml
index 15bd6393..2a5cd8aa 100644
--- a/src/main/resources/egovframework/spring/context-common.xml
+++ b/src/main/resources/egovframework/spring/context-common.xml
@@ -2,9 +2,12 @@
-
diff --git a/src/main/resources/egovframework/spring/context-validator.xml b/src/main/resources/egovframework/spring/context-validator.xml
index 03ebe32c..f128f50f 100644
--- a/src/main/resources/egovframework/spring/context-validator.xml
+++ b/src/main/resources/egovframework/spring/context-validator.xml
@@ -2,10 +2,10 @@
-
+
+
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
index 8ec520f2..3b82c206 100644
--- a/src/main/resources/log4j2.xml
+++ b/src/main/resources/log4j2.xml
@@ -16,7 +16,7 @@
-
+
diff --git a/src/main/webapp/WEB-INF/jsp/nlib/board/listQnAs.jsp b/src/main/webapp/WEB-INF/jsp/nlib/board/listQnAs.jsp
index 87fe9c85..495d64b5 100644
--- a/src/main/webapp/WEB-INF/jsp/nlib/board/listQnAs.jsp
+++ b/src/main/webapp/WEB-INF/jsp/nlib/board/listQnAs.jsp
@@ -30,6 +30,7 @@
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %>
+
묻고답하기
@@ -41,22 +42,37 @@
+
-
+
묻고답하기
-
+
+
+
diff --git a/target/classes/log4j2.xml b/target/classes/log4j2.xml
index 8ec520f2..3b82c206 100644
--- a/target/classes/log4j2.xml
+++ b/target/classes/log4j2.xml
@@ -16,7 +16,7 @@
-
+
diff --git a/target/m2e-wtp/web-resources/META-INF/MANIFEST.MF b/target/m2e-wtp/web-resources/META-INF/MANIFEST.MF
index 97f32202..3d685daf 100644
--- a/target/m2e-wtp/web-resources/META-INF/MANIFEST.MF
+++ b/target/m2e-wtp/web-resources/META-INF/MANIFEST.MF
@@ -1,5 +1,5 @@
-Manifest-Version: 1.0
-Built-By: KNKIM
-Build-Jdk: 1.8.0_291
-Created-By: Maven Integration for Eclipse
-
+Manifest-Version: 1.0
+Built-By: KNKIM
+Build-Jdk: 1.8.0_291
+Created-By: Maven Integration for Eclipse
+