Servlet+spring+mybatis結合傳輸json陣列
阿新 • • 發佈:2019-02-05
因為所在專案的框架是由內部人員開發的openx框架,即js+abstractServlet封裝了servlet層,面向介面程式設計mvc框架。
而今天又收到任務因為ios端和android端的配置中心任務,要單獨寫一個Servlet接發請求。
在這個過程中遇到幾個沒碰到的異常,特地記錄一下。
一個是servlet版本異常。
因為用的是maven構建的專案,因此提示使用2.5的servlet-api。但是會報錯。
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId>所以改用<version>2.5</version></dependency>
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>並且scope為provided,編譯時通過,執行時不通過。即可解決。
第二個是servlet引用mybatis的dao層介面。
一般習慣是直接autowired。但是servlet有自己的容器,無法直接引用spring的註釋。
所以使用
protected ConfDao confDao; protected ConfItemDao confItemDao; protected AppVersionDao appVersionDao; protected StageDao stageDao;
@Override public void init() throws ServletException{ super.init(); ServletContext servletContext = this.getServletContext();的方式獲取到spring容器中注入的bean。WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext); confDao = (ConfDao)context.getBean("confDao"); confItemDao = (ConfItemDao)context.getBean("confItemDao"); appVersionDao = (AppVersionDao)context.getBean("appVersionDao"); stageDao = (StageDao)context.getBean("stageDao"); }
第三個是通過拿到的物件資料解析成json陣列返回
JSONStringer stringer = new JSONStringer();
stringer.array(); for(ConfItem item:query(entity.getId()).getItems()){ stringer.object().key(item.getKey()).value(item.getValue()).endObject(); } stringer.endArray();
resp.getOutputStream().write(stringer.toString().getBytes("utf-8")); resp.setContentType("text/json; charset=UTF-8");