Json大量字段案例(300多個key),需要做一個客戶中心抽調各個系統的客戶信息的功能,在每個系統中需要寫客戶端代碼,在客戶中心繫統需要寫服務端代碼。
客戶端:
json串截圖如下,注意在json結構中有對象也有數組也就是集合。在java類和json對象的互相轉換過程中,如果將json串轉換成java類對象,在裏層的特殊類型,也就是[]集合的,我們需要進行特殊的處理。
1.創建線程:(向客戶中心推送客戶信息時,前提是不能影響本系統的流程,也就是說不管你藉口中的方法是否報錯藉口是否通都不能影響源代碼的正常秩序,因爲我們新增了線程),內部類。
try {
Thread thread = new Thread(new Runnable() {
public void run() {
//次數寫客戶端調用接口的相關方法
}
});
thread.start();
} catch (Exception e) {
e.printStackTrace();
}
根據json的結構構建出對應的java類來。一層一層的寫java類,查詢出所有需要的信息賦值到java類對象中後,將對象轉化成可以推送的json對象
JSONObject fromObject = JSONObject.fromObject(customerCenter,jsonExcludeEmpty());
private JsonConfig jsonExcludeEmpty(){//去除空的json鍵值對
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setJsonPropertyFilter(new PropertyFilter() {
@Override
public boolean apply(Object source, String name, Object value) {
return value == null;
}
});
return jsonConfig;
}
調用HTTP工具類推送信息調用接口,最後獲得接口的返回值result.
同樣在獲取數據本系統做保存時,調用接口後獲得返回值result
JSONObject jsonObject = JSONObject.fromObject(result);
String status = jsonObject.getString("status").trim();
//過濾掉不需要處理的json對象
JsonConfig config=new JsonConfig ();
config.setExcludes(new String[]{"educationInfos","carInfo","houseInfo"});
JSONObject dataJSON = new JSONObject().fromObject(data,config);
//json轉java對象特殊的類型需要單獨處理,比如list [ ]中括號
Map<String, Class> classMap = new HashMap<String, Class>();
classMap.put("phones", CustomerCenterPhone.class);
classMap.put("companyPhones", CustomerCenterPhone.class);
classMap.put("emails", CustomerCenterEmail.class);
..........................
CustomerCenter customerCenter =(CustomerCenter)JSONObject.toBean(dataJSON,CustomerCenter.class,classMap);
這樣就獲得到了最外層整體的對象CustomerCenter
,在這個對象中,我做的這個項目有300多個字段。裏面的對象和集合還是比較多的,在做的時候要仔細的核對好。
服務端:
http服務端的代碼一般不是在service類或是接口中寫,而是直接寫在controller中,因爲是http的嘛,就和一個頁面訪問一樣先進入到controller層,類的註解不變還是@Controller@RequestMapping(value="/ApplicationController")兩個後面的是訪問的名稱。在方法上有了一些變化,先看下面的代碼:
public void approveResult(@RequestBody PharosResultPojo pharosResultPojo,HttpServletRequest request,HttpServletResponse response){
//PharosResultPojo 這個是接受數據的java類
//裏面直接寫相應的功能,在處理完後,需要給調用者返回處理的結果
PrintWriter out;
out = response.getWriter();
JSONObject result = new JSONObject();
result.put("result", "ok");
out.write(result.toString());
out.flush();
out.close();
}
<b:bean id="resourceDetailsService"
class="*********.security.ResourceDetailsServiceImp">
<b:property name="filterURL">
<b:map>
<b:entry key="/ApplicationController/**" value="ROLE_ANONYMOUS" />
直接將這個類給取消攔截,具體的在xml中的寫法,有一些是公司封裝的比較詳細,如果你做的項目什麼都沒有的話,那麼你可以在網上搜索一下如何在spring mvc項目(我公司用的是spring mvc項目這個框架)中取消controller類的訪問攔截,應該很簡單的。