Spring MVC中 Json序列化物件例項的問題和兩個辦法
阿新 • • 發佈:2018-12-26
情況是這樣的:
HTTP請求中,將一個類的例項直接JSON成文字,返回給客戶的端的辦法。
系統:ContOS ,IDE:intellij Spring:4.3.6 Json:1.9.13
如果要將一個類的例項直接返回給HTTP請求的客戶端,是沒辦法的。這樣做的結果是500錯誤無法識別的型別。
那麼我們一般就是要序列化了。
方法有很多我這裡介紹兩個我常用的:
一、用JSON工具序列化
二、Spring 通過ResponseBody直接返回(當然要做一點處理)
開始上車吧
類模型是像這樣的,我們要把它直接返回給客戶端:
public class DMProduct { private String protID; private String protName; public String getProtID(){ return protID; } public String getProtName(){ return protName; } public void setProtID(String protID){ this.protID=protID; } public void setProtName(String protName){ this.protName=protName; } }
方法一:用JSON工具序列化:需要包為org.json(後面有加包的程式碼)
@RequestMapping(value ="/getProduct", method = RequestMethod.GET) //請求方法和請求方式 public @ResponseBody String getProduct() { DMProduct dmProduct=new DMProduct(); //DMProduct類裡面設定ProtID,ProtName等幾個欄位 dmProduct.setProtID("010001"); dmProduct.setProtName("白蘿蔔"); String result= JsonHelper.objectToJson(dmProduct).toString(); //將例項JSON 返回給HTTP客戶端,方法在下面。注意.toString() return result; }
//JSON的方法體 public static<T> JSONObject objectToJson(T obj) { ObjectMapper mapper = new ObjectMapper(); String jsonStr = ""; try { jsonStr = mapper.writeValueAsString(obj); }catch (Exception e){ e.printStackTrace(); } return new JSONObject(jsonStr); }
這種辦法很簡單,JSON的方法可以做在一個工具類裡面,呼叫就可以了。需要一個包:org.json.下面是新增這個包的方法
<!-- https://mvnrepository.com/artifact/org.json/json-->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
</dependency>
方法二:Spring 通過ResponseBody直接返回
這個需要的包很重要的,我先放出來。
這個包一定要,很多教程裡面沒有說到這個包,搞得我一直找不到原因
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.6</version> </dependency>
下面兩個是JSON的包,也是必須的,網上的方法都有提到這兩個包
<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-core-asl-->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
PS:maven包的查詢新增可以到這個網站上去查:點選開啟連結,在搜尋裡面找你要的包名,點開後會列出很多版本,點選你要的新的版本,可以看到這個版本詳情裡面有新增
Maven包的方法。
把包新增好之後,在Web.xml裡面上下文的配置檔案在哪裡:如
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>
在WEB-INF下的
mvc-dispatcher-servlet.xml檔案是上下文的配置檔案。開啟這個檔案
<mvc:annotation-driven/> //確保有這一條,就可以了。具體原理我就不多講,要我講我也不懂,哈哈,後面會貼大神的解說。
好了,全部工具做完了。
我們再理一下:
首先新增必需的三個JSON包。
再找到上下檔案配置檔案,開啟配置檔案,新增
<mvc:annotation-driven/>
完成。
下面是請求的部分了:
@RequestMapping(value = "/getProduct2", method = RequestMethod.GET) //一樣是客戶端的請求方法體和請求方式
public @ResponseBody DMProduct getProduct2() {
DMProduct dmProduct=new DMProduct();
dmProduct.setProtID("010001");
dmProduct.setProtName("白蘿蔔");
return dmProduct; //直接就可以返回類的例項,系統會自動幫我們序列化給客戶端
}
現在就這麼幾下,不用寫程式碼了,現在程式設計師越來越簡單了,天不早了,希望對你有用。