1、引入jackson包
要想在springmvc框架下支持json的轉換,需要引入jackson的包,在pom.xml中添加如下代碼:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.7</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.7</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.7</version> </dependency>
沒有用maven的可以去官網下載jar包
修改springMVC-servlet.xml文件,修改mvc:annotation-driven標簽對應的內容,其實引用了jackson的包,默認就加了對json的轉換了,我試了一下,不添加也可以用。
<mvc:annotation-driven> <mvc:message-converters> <ref bean="stringHttpMessageConverter"/> <ref bean="mappingJackson2HttpMessageConverter"/> </mvc:message-converters> </mvc:annotation-driven> <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/> <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean>
2、pojo類的轉換
添加一個pojo類 User.java
public class User { private String username; private String fav; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getFav() { return fav; } public void setFav(String fav) { this.fav = fav; } }
Controller類中將User對象轉換成json字符串輸出:
@RequestMapping("/test1") @ResponseBody public User test1() { User user = new User(); user.setUsername("張三"); user.setFav("乒乓球"); return user; }
也可以這么寫:
@RequestMapping("/test1") public @ResponseBody User test1(HttpServletRequest request) { User user = new User(); user.setUsername("張三"); user.setFav("乒乓球"); return user; }
輸出的結果是:
{"username":"張三","fav":"乒乓球"}
3、Map的轉換
如果沒有pojo類,只是一些鍵值對的輸出,可以使用Map
@RequestMapping("/test2") @ResponseBody public Map<String,String> test2() { Map<String,String> map = new HashMap<String,String>(); map.put("username", "張三"); map.put("fav", "乒乓球"); return map; }
輸出的結果跟上面的一樣:
{"username":"張三","fav":"乒乓球"}
4、接收json串做為參數
@RequestMapping(value="/test3",consumes="application/json",method=RequestMethod.POST) public String test3(@RequestBody User user,HttpServletRequest request) { request.setAttribute("username", user.getUsername()); request.setAttribute("fav", user.getFav()); return "/test3"; }
這里是使用@RequestBody User user作為接收參數,如果要接收json,接收方式只能是post方式,不然會報錯
這里我是返回到了一個jsp頁面,這里就不把jsp頁面的內容寫出來了
這里列一下上一個請求頁面的html:
<script type="text/javascript" src="js/jquery-2.1.1.js"></script> <script type="text/javascript"> $.ajax({ url: "test3", cache: false, contentType:"application/json", data:JSON.stringify({username:'張三',fav:'乒乓球'}), dataType:"json", type: "POST", success: function(html){ alert(html); } }); </script>
5、另外一種選擇Gson
Gson的使用更加簡單,也是目前流行的json處理包,可以把jackson替掉,引入gson
pom.xml
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> </dependency>
springMVC-servlet.xml文件
<mvc:annotation-driven> <mvc:message-converters> <ref bean="stringHttpMessageConverter"/> <ref bean="mappingGsonHttpMessageConverter" /> </mvc:message-converters> </mvc:annotation-driven> <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/> <bean id="mappingGsonHttpMessageConverter" class="org.springframework.http.converter.json.GsonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean>