Spring Json View(Spring+Json)

Spring Json View是Spring-MVC中用于支持JSON的模块,它深植于Spring MVC框架内,适用于所有标准控制器。该文介绍了Spring Json View的特性、配置、绑定、校验、错误处理和异常处理,提供了与Ajax交互的解决方案,并对比了SojoJsonStringWriter和JsonlibJsonStringWriter的差异。此外,还展示了如何通过JsonExceptionResolver处理异常。
摘要由CSDN通过智能技术生成

Spring Json View(Spring+Json)

1576个读者 jdonee @ yeeyan.com 07/04/2008 双语对照  原文 字体大小

简介

Spring json-view 为Spring-MVC提供了对JavaScript Object Notation (json) 的支持,它深入地集成在Spring MVC模块里,能够适用于所有标准的控制器类。

什么是Spring Json View?

 

Spring json-view  Spring-MVC提供了对JavaScript Object Notation (json) 的支持,它深入地集成在Spring MVC模块里,能够适用于所有标准的控制器类。

Web 2.0 Ajax 时代里常见的方式是客户(浏览器)和服务器的交互。在Java服务器端通常把Spring MVC看成是一个标准的web框架。他们尝试通过Spring MVCJson方式的视图结合成为一个方案,比如Json-Lib-Ext-Spring

在我们第一个Web2.0工程里我们寻找一种方式使用服务器端Spring-MVC的知识接收和响应Ajax请求。但是没有一个令苛刻的Spring MVC开发者们感到满意。所以我们开始探索Spring Json-View用于支持所有Spring MVC特性。 

spring-json 1.0 增加到Maven2的下载库,地址如下:

http://repo1.maven.org/maven2

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

下 

哪些不同点? 

Spring Json View 深入地集成在Spring MVC模块里。它能够适用于所有的SpringMVC支持(SimpleFormController)的标准控制器类。

 

配置

它通过SpringXml方式配置

 

绑定

它支持用Spring方式把Bean属性转换到View里。(请参见SimpleFormControllerinitBinder()方法)

集成了普遍的Json组件。它现在默认支持Sojo,当然还有JsonLib

 

校验

它支持用ValidatorBeans Spring 方式的校验

 

错误处理

它支持Spring方式错误处理,包括全局、字段和绑定错误。

 

异常处理

它使用 JsonExceptionResolver支持 Spring 方式的异常处理。

 

通过它你只要改变视图而不必改变后台编码就能把典型Spring应用转换为典型Web2.0应用。

 

文档中心

 

Spring json-view  Spring-MVC提供了对JavaScript Object Notation (json) 的支持,它能让你像平时使用springmvc一样使用。现在它能够让你的基于Ajax的前端工具更容易提取(服务器端)数据。

基本上,它是通过AbstractView实现的。现在它增加了Spring BindingResult(结果绑定)Field GlobalErrors(字段和公共错误信息),完成校验和一个将属性值转换成显示字符串的属性编辑器。但是它也可以提供一些有用的特性为Ajax-Frameworks服务。比如,类似prototype的错误处理。当然还有转换成Json 字符串的Model

 

查看演示程序可以获得实用的例子。

 

------------------------目录---------------------------- 

绑定

   1.用法说明

   2.JsonStringWriter

       1.SojoJsonStringWriter

       2.JsonlibJsonStringWriter

   3.比较 

校验

   1. Spring MVC 校验样例

错误处理

    1.配置概述

    2.Http状态错误

    3.模型标记错误

    4.自主实现的Json错误处理器

异常处理

    1.配置概述

    2.Json错误处理器

    3.Json异常处理器

       1.ExceptionMessageExceptionHandler(异常消息异常处理器)

       2.StackTraceExceptionHandler (堆栈异常处理器)

       3.自定义实现JsonExceptionHandler 

其它配置

    1.容器类型支持(ContentType)

2.编码支持(Encoding ) 

 

绑定-数据类型转换

 

1.用法说明

   2.JsonStringWriter

       2.1.SojoJsonStringWriter

       2.2.JsonlibJsonStringWriter

   3.比较

 

1. 用法说明

你可以从Spring Command FormController中实现你知道的绑定方式。通常你在ServletRequestDataBander中用控制器的初始绑定方法定义一个自定义对象.

 

你能绑定的CustomEditor包括默认的Spring-MVC提供了如下对象绑定到CustomEditor

  • java.util.Date普通数据类型的类
  • 能按CommensBeanUtils-Syntax匹配ComandBean字段的类  

     @Override
     protected void initBinder(HttpServletRequest request, 
                        ServletRequestDataBinder binder) throws Exception{
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
        CustomDateEditor editor = new CustomDateEditor(dateFormat, true);
        binder.registerCustomEditor(Date.class, editor);
        binder.registerCustomEditor(Date.class, "birthday", editor);
     }

2. JsonStringWriter

JsonStringWriter 控制 模型/Command对象间值的转换,当然,还有生成Json字符串。JsonStringWriter 最大限度地保持着这种在Spring MVC所知道的自定义编辑器的注册方式。在已经存在Json库的那些数据格式转换的特性没有找到完全符合我们需要的特性。在另外协助的库支持的特殊特性你又不得不使用。所以你将发现依照JsonStringWriter的实现绑定支持的不同。在下面的章节你会发现它们如何帮助你去选择一个JsonStringWriter 

2.1 SojoJsonStringWriter - Sojo Json 支持

SojoJsonWriter Spring Json-View 的默认实现。它是一个通过Sojo Json 方式传输和接近默认Spring-MVC绑定方式的整合方案。

你可以按如下方式绑定自定义编辑器:

   1.  java.util.Date普通数据类型的类

   2. 能按CommensBeanUtils-Syntax匹配ComandBean字段的类  
   3.
可选:像那些附加referenceData-methodModel中任意其它类

2.2 JsonlibJsonStringWriter -  Json-Lib支持

JsonlibJsonStringWriter 提供了Json-Lib框架到Spring Json-View的集成。我没有发现它有按CommensBeanUtils-Syntax匹配ComandBean实现本地化属性的方法。但是你可以通过注册一个JsonlibJsonWriterConfiguratorTemplat从而操纵Json-Lib框架。它被封装在一个net.sf.json.JsonConfig对象里。更多信息请参见Json-lib 主页。

你可以按如下方式绑定自定义编辑器:

   1. java.util.Date普通数据类型的对象  (it converts the howl model map.)
   2. 
可选:通过JsonlibJsonWriterConfiguratorTemplate注册一个自定义的"net.sf.json.JsonConfig" 对象。 

3 比较

 

SojoJsonStringWriter

JsonlibJsonStringWriter

Supported library

SOJO-0.5.0

JSON-lib-2.2.1

Default Writer

yes

no

ComandBean conversion

 

 

Convert class types

yes

yes

Properties located by Commons BeanUtils syntax

yes
explicit Collection conversion

no

Other model map properties conversion

 

 

Convert class types

optional

always

Properties located by
Commons BeanUtils syntax

optional
explicit Collection conversion

no

JsonWriterConfiguratorTemplate

optional

optional

 
SojoJsonWriter - Sojo Json
支持

   1. 绪论
   2. 
简单绑定
   3.
使用CommandBean-Property绑定
   4.
转换所有Model Values.
         1. Model-Map
通过CustomEditor转换所有值

         2. Model-Map通过CustomEditor转换特殊值

 

1. 绪论

SojoJsonWriter Spring Json-View 的默认实现。它是一个通过Sojo Json 方式传输和接近默认Spring-MVC绑定方式的整合方案。

你可以按如下方式绑定自定义编辑器:

   1.  java.util.Date普通数据类型的类 
   2.
能按CommensBeanUtils-Syntax匹配ComandBean字段的类

   3. 可选:像那些附加referenceData-methodModel中任意其它类 

注意 
        Spring Json View
不能绑定如下例BeanCollection类型中的属性

        * Spring提供的写法:

          bean.list.property

          这个语法是找出conllection中从0-n的所有属性
        * Spring Json View
能找出像下面这样使用解释型索引的Collection-Beans的属性:

          bean.list[0].property

          bean.set[1].list[2].property

2. 简单绑定 

initBinder 源文件:
=================

@Override
protected void initBinder(HttpServletRequest request, 
                        ServletRequestDataBinder binder) throws Exception{
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
        CustomDateEditor editor = new CustomDateEditor(dateFormat, true);
        binder.registerCustomEditor(Date.class, editor);

结果:
=======

{"command":{
            "birthday":"30-01-2008",
            "marriage":"30-01-2008",
            "placeofbirth":"Sydney"
}}

3. 使用CommandBean-Property绑定

CommonsBeanUtils-Syntax 找出CommandBean中的属性

initBinder 源文件:
==================
@Override
protected void initBinder(HttpServletRequest request, 
                ServletRequestDataBinder binder) throws Exception{
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
        CustomDateEditor editor = new CustomDateEditor(dateFormat, true);
        binder.registerCustomEditor(Date.class, "birthday", editor);

结果:
======

{"command":{
          "birthday":"30-01-2008",
          "marriage":"Wed Jan 30 00:00:00 GMT 2008",
          "placeofbirth":"Sydney"
}} 

4. 转换所有Model的值

SojoJsonStringWriter 已经提供对非CommandBean-ValuesModel Map 随意的转换。你可以利用这个特性在view.xmlJsonWriter- Bean设置convertAllMapValues 属性。

你能在一个CustomEditor定义的字段利用non_commandbean_key找到它们。

    * (name_in_model_map_key).property
    * (key).list[1].property 

配置文件

<beans>
    <bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView">
        <property name="jsonWriter"><ref bean="jsonWriter"/></property>
    </bean>
   
    <bean name="jsonWriter"
          class="org.springframework.web.servlet.view.json.writer.sojo.SojoJsonStringWriter">
        <property name="convertAllMapValues"><value>true</value></property>
    </bean>
</beans> 

4.1 Model-Map通过CustomEditor转换所有值 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值