一般正常的servlet返回json时,会像下面这样:
response.setContentType("text/JSON;charset=utf-8");
response.getWriter().print(gson.toJson(page));
response.getWriter().flush();
response.getWriter().close();
return null;
这样相对来说比较麻烦,也不好封装。新版spring返回json时,可以通过@ResponseBody直接返回,这点做得很不错,大概代码如下:
@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,有一点需要注意下,那就是访问spring mvc的controller时中间加了个/action,那是因为DispatcherServlet的映射路径如果直接使用/*的话,会将相应的jsp屏蔽掉,所以一定得加个前缀以区别jsp与controller.
上面的json中如果有中文的话,会出现乱码,所以则修改spring-servlet.xml配置文件,修改下AnnotationMethodHandlerAdapter的messageConverters即可,因为其默认采用的iso8895-1的编码,代码如下:
<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>
经过这些步骤后,对json的处理就相当方便了。