- 浏览: 390028 次
- 性别:
- 来自: 株洲
文章分类
最新评论
-
自闭丨先生:
melin 写道缺少合并web.xml文件功能。不过使用了se ...
使用Maven WAR插件实现多Web应用间的重迭运用 -
331008019:
Hudson 系列的文章写得够细、够全! 学习了…
如何正确在Hudson中使用Maven构建Job -
selina2011874:
请问Hudson也就是现在的jenkins 能选择对某个版本的 ...
使用Hudson进行持续集成(九) -
lovefly_zero:
wv1124 写道使用Hudson调用shell执行make, ...
Use Hudson之项目构建 -
wv1124:
使用Hudson调用shell执行make,编译失败hudso ...
Use Hudson之项目构建
绑定-数据类型转换
1.用法说明
2.JsonStringWriter
2.1.SojoJsonStringWriter
2.2.JsonlibJsonStringWriter
3.比较
1. 用法说明
Spring-Json View 当前提供了JSON-lib和SOJO的绑定支持。你可以从Spring Command或FormController中实现你已知的绑定方式。通常的做法是您在该控制器的initBinder方法内通过ServletRequestDataBinder注册一个CustomEditor。
默认情况下,Spring-MVC提供通过Command bean 的属性绑定CustomEditors:
- 像java.util.Date的普通数据类型
- 支持CommonsBeanUtils语法的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 管理model/Command对象间值的转换,当然,还有生成Json字符串。JsonStringWriter能最大限度地保持着您在Spring MVC所知道的CustomEditors的注册方式。在已知的Json类库的数据转换约定并不完全支持我们需要的特性。另一方面,有些Json类库的一些特定方式的特性你也可以使用。所以你可以按照JsonStringWriter的实现一些不同的绑定支持。
在下面的章节将告诉你它们将帮助你如何去选择合适的JsonStringWriter。
2.1 SojoJsonStringWriter - Sojo Json 支持
SojoJsonWriter 是Spring Json-View 的默认实现。它是一个通过Sojo Json 方式传输和非常接近默认Spring-MVC绑定行为的整合方案。
你可以绑定一个CustomEditors到:
-
像java.util.Date普通数据类型
-
支持CommonsBeanUtils语法的ComandBean属性
-
可选:在类似它们的Model中的任意其它对象添加referenceData方法。
可选:通过SojoJsonWriterConfiguratorTemplate可注册一个自定义“ SojoConfig ”对象。
2.2 JsonlibJsonStringWriter - Json-Lib支持
JsonlibJsonStringWriter 提供了Json-Lib框架到Spring Json-View的集成。我发现它没有按CommensBeanUtils-Syntax匹配ComandBean实现本地化属性的方法。但是你可以通过注册一个JsonlibJsonWriterConfiguratorTemplate从而完全操纵Json-Lib框架。它是一个"net.sf.json.JsonConfig"对象的封装。更多信息请参见Json-lib 主页。
你可以绑定一个CustomEditors到:
1. 像java.util.Date普通数据类型 (它显式转换成map model)
可选:通过JsonlibJsonWriterConfiguratorTemplate注册一个自定义"net.sf.json.JsonConfig" 对象。
3 比较
|
SojoJsonStringWriter |
JsonlibJsonStringWriter |
类库支持 |
SOJO-0.5.0 |
JSON-lib-2.2.1 |
默认写入器 |
是 |
否 |
ComandBean转换 |
|
|
转换类的类型 |
是 |
是 |
通过Commons BeanUtils语法定位属性 |
是 强类型Collection转换 |
否 |
其它Model Map属性转换 |
|
|
转换类的类型 |
可选 |
一直 |
通过Commons BeanUtils语法定位属性 |
可选 强类型Collection转换 |
否 |
JsonWriterConfiguratorTemplate |
可选 |
可选 |
SojoJsonWriter - Sojo Json 支持
1. 绪论
2. 简单绑定
3. 绑定CommandBean属性
4. 转换所有Model值
1. 通过CustomEditor转换所有值到Model-Map
2. 通过CustomEditor转换指定值到Model-Map
5. 注册SojoJsonWriterConfiguratorTemplates
1. 绪论
SojoJsonWriter 是Spring Json-View 的默认实现。它是一个通过Sojo Json 方式传输和接近默认Spring-MVC绑定方式的整合方案。
你可以绑定一个CustomEditors到:
注意:
Spring Json View 不能绑定如下例Bean中Collection类型中的属性:
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属性
按CommonsBeanUtils语法定位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属性提供转换到Model Map。你可以通过在view.xml用JsonWriter- Bean设置convertAllMapValues 属性来激活这个特性。
您可以通过注册CustomEditor的开始部分的字段以定位它们(非commandbean键)。
* (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 通过CustomEditor转换所有值到Model-Map
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); }
效果:
=======
{"signdate":"30-01-2008",
"command":{
"birthday":"30-01-2008",
"marriage":"30-01-2008",
"placeofbirth":"Sydney"
}}
4.2 通过CustomEditor转换指定值到Model-Map
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); binder.registerCustomEditor(Date.class, "(signdate)", editor); }
效果:
=======
{"signdate":"30-01-2008",
"command":{
"birthday":"30-01-2008",
"marriage":"Wed Jan 30 00:00:00 GMT 2008",
"placeofbirth":"Sydney"
}}
5. 注册SojoJsonWriterConfiguratorTemplates
如果你想使用一个SojoJsonWriterConfiguratorTemplate,你必须要
- 在JsonlibJsonStringWriter中设置"enableJsonConfigSupport"属性。
- 实现SojoJsonWriterConfiguratorTemplate抽象类。
- 在JsonWriterConfiguratorTemplateRegistry中注册SojoJsonWriterConfiguratorTemplate。
推荐把SojoJsonWriterConfiguratorTemplate注册在initBinder方法中,但前提您应有任意一个可以发送请求的控制器方法。这个方法甚至可以是一个纯控制器接口实现的handleRequest 方法。
在spring配置文件中设置enableJsonConfigSupport属性
<beans> <bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView"> <property name="jsonWriter"><ref bean="jsonlibJsonWriter"/></property> </bean> <bean name="jsonlibJsonWriter" class="org.springframework.web.servlet.view.json.writer.jsonlib.JsonlibJsonStringWriter"> <property name="enableJsonConfigSupport"><value>true</value></property> </bean> </beans>
配置 : SojoConfig
SojoConfig 属性 | 函数 | 允许值 | 默认值 |
convertAllMapValues | 见 4. 转换所有Model值 | true, false | false |
ignoreNullValues | Model-Map中所有“null”值将被忽略其他如"属性":null将被自动转换为"null" | true, false | false |
excludedProperties | 整个Model Map的属性都能被排除在外 | 像(name_in_model_map_key )属性一样的字符串数组 commandbean属性 |
空 String - Array |
interceptorList | 增加注册Sojo WalkerInterceptor-Interface的实现,详见sojo主页 | Sojo WalkerInterceptor的实现 | 空 List |
注册SojoJsonWriterConfiguratorTemplates
initBinder 源码:
==================
@Override protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception{ JsonWriterConfiguratorTemplateRegistry registry = JsonWriterConfiguratorTemplateRegistry.load(request); registry.registerConfiguratorTemplate( new SojoJsonWriterConfiguratorTemplates(){ @Override public SojoConfig getJsonConfig() { SojoConfig config= new SojoConfig(); String[] excludes = new String[]{ "birthday" }; config.setExcludedProperties(excludes); return config; } } ); }
效果:
=======
{
"command":{
"placeofbirth":"Sydney"
}}
JsonlibJsonWriter - Json-Lib支持
1. 绪论
2. 使用
3. 绑定
4. 注册 JsonlibJsonWriterConfiguratorTemplates
1. 绪论
JsonlibJsonWriter的绑定能力相对较弱.
1.你只能绑定公共值的类类型到一个CustomEditor,如 java.util.Date到整个Model Map。您不能具体指定单个的bean属性或一个Collection的索引属性!
2. 你能通过注册JsonlibJsonWriterConfiguratorTemplate订制一个JsonConfig对象以完成"从model-map到JSON"的转换。
JsonlibJsonWriterConfiguratorTemplate 使你能够使用一些Json-Lib的高级特性,比如你能使用过滤或者触发一些事件。
注意:
JsonlibJsonWriter会 注册一个自己的JsonValueProcessor 并用JsonValueProcessorMatcher匹配它。
* JsonValueProcessor 使JsonlibJsonWriter 能够把CustomEditor注册到它的一个initBander方法里。
* JsonValueProcessorMatcher 会匹配JsonValueProcessor所有的值。JsonValueProcessor能决定这些值是否已经转换。
如果你想注册一个自定义的JsonValueProcessor或者 BeanProcessor,请记住,在某种程度上它并不能完全按你期望的可能来改变JsonlibJsonWriter 的行为,所以最好多测试你的程序。
* 您注册的任何一个自定义行为都不会影响“从请求属性到CommandBean”之间的绑定和转换。
2. 使用
注册一个JsonlibJsonStringWriter-Bean到JsonView。
<beans> <bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView"> <property name="jsonWriter"><ref bean="jsonlibJsonWriter"/></property> </bean> <bean name="jsonlibJsonWriter" class="org.springframework.web.servlet.view.json.writer.jsonlib.JsonlibJsonStringWriter"/> </beans>
3. 绑定
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); }
效果:
=======
{"signdate":"30-01-2008",
"command":{
"birthday":"30-01-2008",
"marriage":"30-01-2008",
"placeofbirth":"Sydney"
}}
4. 注册JsonlibJsonWriterConfiguratorTemplates
如果你想使用JsonlibJsonWriterConfiguratorTemplate,必须要
1. 在JsonlibJsonStringWriter设置"enableJsonConfigSupport"属性。
2. 实现JsonlibJsonWriterConfiguratorTemplate抽象类。
3. 注册JsonlibJsonWriterConfiguratorTemplate到JsonWriterConfiguratorTemplateRegistry。
推荐把JsonlibJsonWriterConfiguratorTemplate注册在initBinder方法中,但前提您应有任意一个可以发送请求的控制器方法。这个方法甚至可以是一个纯控制器接口实现的handleRequest 方法。
4.1
在Spring 配置文件里设置 "enableJsonConfigSupport"属性
<beans> <bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView"> <property name="jsonWriter"><ref bean="jsonlibJsonWriter"/></property> </bean> <bean name="jsonlibJsonWriter" class="org.springframework.web.servlet.view.json.writer.jsonlib.JsonlibJsonStringWriter"> <property name="enableJsonConfigSupport"><value>true</value></property> </bean> </beans>
4.2 注册 JsonlibJsonWriterConfiguratorTemplate
initBinder 源文件:
==================
@Override protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception{ JsonWriterConfiguratorTemplateRegistry registry = JsonWriterConfiguratorTemplateRegistry.load(request); registry.registerConfiguratorTemplate( new JsonlibJsonWriterConfiguratorTemplate(){ @Override public JsonConfig getJsonConfig() { JsonConfig config = new JsonConfig(); // Exclude all date properties config.setJsonPropertyFilter( new PropertyFilter(){ public boolean apply( Object source, String name, Object value ) { if( value != null && Date.class.isAssignableFrom( value.getClass() ) ){ return true; } return false; } }); return config; } } ); }
效果:
=======
{
"command":{
"placeofbirth":"Sydney"
}}
发表评论
-
Spring Json View之常见问题
2008-12-11 15:32 3174下载 在这里下载 SVN地址 View ... -
Spring Json View之快速开始(二)
2008-12-11 15:30 2721快速开始-用SimpleForm-Controller提交GE ... -
Spring Json View之快速开始(一)
2008-12-11 15:28 9016快速开始-用Controller-Interface提交G ... -
Spring Json View之演示总述
2008-12-11 15:27 1872演示程序 关于 这个演示程序显示了下列用例生成的 ... -
Spring Json View之其他配置
2008-12-11 15:24 2191其它配置 ContentType Enco ... -
Spring Json View之错误处理和异常处理
2008-12-11 15:23 2337错误处理 错误处理是在控制器增加一些公共或字段级别的错误 ... -
Spring Json View之校验
2008-12-11 15:21 1822校验 来自Post的请求校验的非常容易。仅仅需要按Sprin ... -
Spring Json View之概述
2008-12-11 15:17 2096文档中心 Spring json-vie ... -
Spring Json View之引论
2008-12-11 15:13 3645原文地址:http://spring-json.sour ...
相关推荐
"ext + spring Json view + springMVC + Freemaker"的组合提供了一种强大的解决方案,它整合了多种技术,以实现丰富的用户界面、灵活的数据处理和高效的视图渲染。下面我们将深入探讨这些技术及其相互作用。 1. **...
2. 配置Spring MVC的视图解析器,例如使用`MappingJackson2JsonView`或`JacksonJsonView`(如果使用Jackson库)来处理JSON视图。 3. 在控制器方法上使用`@RequestMapping`和`@ResponseBody`注解,指定处理HTTP请求并...
Spring MVC还提供了`@JsonView`注解来控制JSON响应中的数据粒度,以及`@JsonProperty`和`@JsonIgnore`来控制哪些字段应包含在JSON中。 **jQuery和JavaScript** jQuery是一个流行的JavaScript库,简化了DOM操作、...
在实际开发中,你可能还需要处理JSON安全问题,例如使用`@JsonView`来限制返回的字段,或者使用`@JsonFormat`来控制日期格式等。同时,随着版本的更新,确保始终使用最新的稳定版本以获取最佳性能和安全性。
3. **视图解析器**:如果你的返回类型是`ModelAndView`,你可以配置一个`MappingJackson2JsonView`,这样视图会自动将模型数据转换为JSON。 4. **JSON与Ajax**:Spring MVC 3与jQuery或其他JavaScript库配合,可以...
8. **自定义JSON视图**:如果需要对JSON的生成进行更精细的控制,可以创建自定义的`JsonView`,并在返回类型上指定该视图。 总之,JSON在Spring中的应用是多方面的,它简化了数据交换,提高了开发效率。无论是简单...
在实际开发中,还可以利用Spring Data REST自动创建RESTful服务,或者使用`@JsonInclude`和`@JsonView`等注解控制JSON序列化的细节。通过深入理解和掌握这些知识点,开发者能够更高效地构建和维护JSON接口。
当JSON绑定失败时,Spring默认会返回一个HTTP 400 Bad Request错误。可以通过自定义异常处理器,如`HandlerExceptionResolver`,来优雅地处理这些错误,提供详细的错误信息。 总之,Spring Web 4.1处理JSON的能力...
Spring MVC、Ajax 和 JSON 是现代Web开发中的关键技术,它们共同构建了高效、动态的用户界面。下面将详细解释这三个技术及其在实际应用中的结合。 **Spring MVC** Spring MVC 是 Spring 框架的一部分,用于构建基于...
Spring MVC 参数自动绑定 List 的解决方法 Spring MVC 参数自动绑定 List 的解决方法是一个常见的问题,在实际项目中,我们经常需要传入一组对象,而不是单个...* Spring MVC 中的高级特性,例如 @JsonView 注解的使用
SpringMVC是Spring框架的一部分,是一个强大的MVC(Model-View-Controller)架构,用于构建企业级的Web应用。它提供了一个灵活的模型绑定,数据验证,以及异常处理机制,使得开发者可以更专注于业务逻辑,而不是底层...
3. 将解析出的数据绑定到UI组件,展示给用户。 4. Springboot作为服务器端,创建RESTful API,返回JSON格式的响应数据。 以上就是Android应用获取、解析和显示JSON数据,以及使用Springboot构建JSON服务器的基本...
Struts2、Spring2.5、EXT和JSON是四个在Web开发中至关重要的技术,它们共同构建了高效、灵活和可扩展的Web应用程序。这里,我们深入探讨这四个技术及其在实际项目中的应用。 首先,Struts2是一个基于MVC(Model-...
1. Spring MVC:Spring MVC 是 Spring 框架的一个模块,专门用于构建 MVC(Model-View-Controller)架构的 Web 应用程序。它提供了一个灵活的模型绑定、数据验证、本地化和异常处理机制,使得开发者能够更加专注于...
标题中的"java开发常用架包,sturts2,spring,json,druid架包"提到了几个在Java开发中非常关键的框架和技术。这里我们将深入探讨这些技术及其在Java Web开发中的应用。 1. **Struts2**:Struts2是基于MVC(Model-...
Spring框架是Java开发中最常用的开源框架之一,它极大地简化了企业级应用的开发工作。Spring Web模块和Spring Web MVC模块是Spring框架中的两个关键组成部分,它们在构建Web应用程序时起着至关重要的作用。 Spring ...
Spring MVC还支持数据绑定,自动将请求参数绑定到Java对象,这极大地简化了表单提交的处理。对于验证,Spring MVC提供了BindingResult和Validator接口,用于校验模型数据的正确性。 另外,Spring MVC与Spring框架的...
总结来说,Ajax向Spring MVC传递JSON涉及的主要步骤包括前端的数据序列化、Ajax请求的发起、服务器端的参数绑定、业务处理及响应的JSON化。理解并熟练掌握这一流程对于进行高效的前后端数据交互至关重要。在实际项目...
Struts2、Spring2.5、Hibernate3.3.2以及ExtJS是Java Web开发中的四大核心技术,它们共同构建了一个强大的MVC(Model-View-Controller)架构,用于实现高效、灵活的企业级应用。这个DEMO是将这些技术集成在一起,以...
在4.2.4版本中,Spring MVC对RESTful服务的支持得到了加强,通过`@RestController`注解可以轻松创建JSON或XML响应的控制器。此外,模型绑定和数据验证也得到了改进,增强了用户体验。 Spring AOP(面向切面编程)是...