spring-json view了解

spring-jsonview了解

以前从action返回json对象都是直接向response中写入string,无外乎两种方式:

方式一:

HashMap<String,Object>hm=newHashMap<String,Object>();

hm.put("success",Boolean.TRUE);

if(users!=null&&!users.isEmpty()){

hm.put("users",users);

}else{

hm.put("users",newArrayList<User>());

}

hm.put("paging",query);

JSONObjectjo=JSONObject.fromObject(hm);

PrintWriterout=null;

out=response.getWriter();

out.write(jo.toString());

out.flush();

out.close();

方式二:

response.getOutputStream().write(html.getBytes());

由于我们是使用的springmvc的controller,今天同事提到了一个更优雅的方式,我也了解了下相关资料。

首页

http://spring-json.sourceforge.net/

参考文档

http://spring-json.sourceforge.net/quickstart.html

同时也参考了公司同事在项目中的配置。步骤如下:

*-servlet.xml文件增加一个xml的Resolver

<beanname="xmlViewResolver"class="org.springframework.web.servlet.view.XmlViewResolver">

<propertyname="location"value="/WEB-INF/views.xml"></property>

<propertyname="order"value="1"></property>

</bean>

<beanid="jspViewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<propertyname="viewClass"value="org.springframework.web.servlet.view.JstlView"></property>

<propertyname="prefix"value="/"></property>

<propertyname="suffix"value=".jsp"></property>

<propertyname="order"value="2"></property>

</bean>

其中XmlViewResolver和InternalResourceViewResolver都是实现了

org.springframework.core.Ordered接口的,所以可以对其进行一个设定顺序,先解析XmlView再处理

InternalResouceView。其中XmlViewResolver的源码中,依赖于诸如的views.xml配置文件(默认是这个)。同时源码中

protectedViewloadView(StringviewName,Localelocale)throwsBeansException

是根据viewName去将对应的view装载起来的。所以到时候先在ModelAndView中设置jsonView,它就会去找对应的

views.xml中的jsonView这个bean,我是这么理解的,所以这样XmlViewResolver还可以支持更多的自定义view。

在项目中的views.xml中是这样定义的:

<beanname="jsonView"class="org.springframework.web.servlet.view.json.JsonView">

<propertyname="jsonWriter">

<refbean="jsonWriter"/>

</property>

</bean>

<beanname="jsonWriter"class="org.springframework.web.servlet.view.json.writer.sojo.SojoJsonStringWriter">

<propertyname="convertAllMapValues">

<value>true</value>

</property>

</bean>

查看JsonView源码,实际上还支持另外三个jsonWriter的。

org.springframework.web.servlet.view.json.writer.sojo.SojoJsonStringWriter

org.springframework.web.servlet.view.json.writer.jsonlib.JsonlibJsonStringWriter

org.springframework.web.servlet.view.json.writer.xstream.XStreamJsonStringWriter

这三个都是实现了

org.springframework.web.servlet.view.json.JsonStringWriter

接口,我们可以选择的使用这三个writer。同时也可以扩展实现我上次比较过的

gson或者jackson的实现。

在我们的Controller中,就可以采用如下方式了:

方式三:

HashMap<String,Object>map=newHashMap<String,Object>();

map.put("success",Boolean.TRUE);

if(users!=null&&!users.isEmpty()){

map.put("users",users);

}else{

map.put("users",newArrayList<User>());

}

map.put("paging",query);

returnnewModelAndView("jsonView",map);

恩。这个很有建设性,知道了这个方法以后,可以扩展更多的自定义view。

相关推荐