json是一種常見的傳遞格式,是一種鍵值對應(yīng)的格式。并且數(shù)據(jù)大小會比較小,方便傳遞。所以在開發(fā)中經(jīng)常會用到j(luò)son。
首先看一下json的格式:
1
|
{key1:value1,key2:value2} |
每一個建對應(yīng)一個值,每個鍵值對之間用逗號連接。并且最后一個鍵值對之后沒有逗號,整體需要有大括號括起來。
一般正常的servlet返回json時,會像下面這樣:
1
2
3
4
5
|
response.getWriter().print(gson.toJson(page)); response.getWriter().flush(); response.getWriter().close(); return null ; |
這樣相對來說比較麻煩,也不好封裝。新版spring返回json時,可以通過@ResponseBody直接返回,這點(diǎn)做得很不錯,大概代碼如下:
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); } } |
訪問方式如下:http://localhost:8080/spring3/action/json/1,有一點(diǎn)需要注意下,那就是訪問spring mvc的controller時中間加了個/action,那是因?yàn)镈ispatcherServlet的映射路徑如果直接使用/*的話,會將相應(yīng)的jsp屏蔽掉,所以一定得加個前綴以區(qū)別jsp與controller.
上面的json中如果有中文的話,會出現(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)過這些步驟后,對json的處理就相當(dāng)方便了。