json是一種常見(jiàn)的傳遞格式,是一種鍵值對(duì)應(yīng)的格式。并且數(shù)據(jù)大小會(huì)比較小,方便傳遞。所以在開(kāi)發(fā)中經(jīng)常會(huì)用到j(luò)son。
首先看一下json的格式:
1
|
{key1:value1,key2:value2} |
每一個(gè)建對(duì)應(yīng)一個(gè)值,每個(gè)鍵值對(duì)之間用逗號(hào)連接。并且最后一個(gè)鍵值對(duì)之后沒(méi)有逗號(hào),整體需要有大括號(hào)括起來(lái)。
一般正常的servlet返回json時(shí),會(huì)像下面這樣:
1
2
3
4
5
|
response.getWriter().print(gson.toJson(page)); response.getWriter().flush(); response.getWriter().close(); return null ; |
這樣相對(duì)來(lái)說(shuō)比較麻煩,也不好封裝。新版spring返回json時(shí),可以通過(guò)@ResponseBody直接返回,這點(diǎn)做得很不錯(cuò),大概代碼如下:
1
2
3
4
5
6
7
8
9
|
@Controller @RequestMapping ( "/json" ) public class JsonController { @RequestMapping (value= "{provinceId}" ,method = RequestMethod.GET) @ResponseBody public String pagination( @PathVariable String provinceId){ return getJsonData(provinceId); } } |
訪問(wèn)方式如下:http://localhost:8080/spring3/action/json/1,有一點(diǎn)需要注意下,那就是訪問(wèn)spring mvc的controller時(shí)中間加了個(gè)/action,那是因?yàn)镈ispatcherServlet的映射路徑如果直接使用/*的話,會(huì)將相應(yīng)的jsp屏蔽掉,所以一定得加個(gè)前綴以區(qū)別jsp與controller.
上面的json中如果有中文的話,會(huì)出現(xiàn)亂碼,所以則修改spring-servlet.xml配置文件,修改下AnnotationMethodHandlerAdapter的messageConverters即可,因?yàn)槠淠J(rèn)采用的iso8895-1的編碼,代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
< bean class = "org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" > < property name = "webBindingInitializer" > < bean class = "com.mvc.commons.CommonsBindingInitializer" /> </ property > < property name = "messageConverters" > < list > < bean class = "org.springframework.http.converter.StringHttpMessageConverter" > < property name = "supportedMediaTypes" > < list > < value >text/plain;charset=UTF-8</ value > </ list > </ property > </ bean > </ list > </ property > </ bean > |
經(jīng)過(guò)這些步驟后,對(duì)json的處理就相當(dāng)方便了。