`
liugang594
  • 浏览: 989727 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自定义Spring MVC中的数据绑定

 
阅读更多

默认情况下,spring mvc的数据映射的实现是自动查找请求中的key为参数名的parameter的值。比如有以下方法:

 

	@RequestMapping(value="/xml", method=RequestMethod.POST)
	public String xmlData(String name, Integer age){
		System.out.println(name+" "+age);
		return "/index";
	}
	

则Spring MVC会使用如下的方法给参数注入值:

 

 

name = request.getParameter("name");
age= new Integer(request.getParameter("age"));

如果想要实现一些自定义的解析方式,又该如何做呢?

 

 

Spring提供了一个annotation org.springframework.web.bind.annotation.InitBinder 可以用来做一些简单的、自定义的解析的实现。

 

例如请求内容如下:

 

<a>
	<name>sss</name>
	<age>21</age>
</a>

这里希望解析完以后,方法中的参数name和age就是对应的xml内容中的name和age的元素的值。

 

 

首先定义一个添加了  InitBinder 注解的方法:

	@InitBinder
	public void addBinder(WebDataBinder webDataBinder, WebRequest webRequest){
		。。。
	}

根据InitBinder的文档说明,以它注解的方法上可以添加很多参数(同RequestMapping) ,典型的参数就是上面看到的WebDataBinder和WebRequest。

 

由于需要的参数类型分别是String和Integer,所以这里添加对于String和Integer类型的自定义的解析的支持,如下:

	@InitBinder
	public void addBinder(WebDataBinder webDataBinder, WebRequest webRequest){
		webDataBinder.registerCustomEditor(String.class, new CustomPropertyEditor(webDataBinder.getObjectName(), webRequest));
		webDataBinder.registerCustomEditor(Integer.class, new CustomPropertyEditor(webDataBinder.getObjectName(), webRequest));
	}

这里 webDataBinder.getObjectName() 里取出来的值就分别是name和age,根据参数的个数,这个方法会被调用多次。

 

下面就是CustomPropertyEditor的实现了:

public class CustomPropertyEditor extends  PropertyEditorSupport {

	private WebRequest WebRequest;
	private String objectName;
	private String value;

	public CustomPropertyEditor(String objectName, WebRequest webRequest) {
		super();
		WebRequest = webRequest;
		this.objectName = objectName;
		extractXML();
	}

	private void extractXML() {
		String xmlContent = WebRequest.getParameter("xml");
		if(xmlContent != null){
			try {
				DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
				ByteArrayInputStream inputStream = new ByteArrayInputStream(xmlContent.getBytes());
				
				Document document = documentBuilder.parse(inputStream);
				NodeList elementsByTagName = document.getElementsByTagName(objectName);
				if(elementsByTagName != null && elementsByTagName.getLength() > 0){
					value = elementsByTagName.item(0).getTextContent();
				}
			} catch (ParserConfigurationException | SAXException | IOException e) {
				e.printStackTrace();
			}
		}
	}

	@Override
	public Object getValue() {
		return value;
	}

}

  

这里就是简单的提取xml中的内容,然后把提供的内容作为getValue()方法的返回值输出就可以了。

分享到:
评论
1 楼 luojiaoxia 2016-02-16  
学习了。。。可是我们日常中用到的很少对不对?

相关推荐

    spring MVC数据绑定大全

    在Spring MVC中,数据绑定是一项核心功能,它允许开发者将用户输入的数据与控制器中的对象属性进行关联,简化了数据处理的复杂性。本文将详细介绍Spring MVC中的数据绑定,并提供实例帮助初学者理解。 1. **模型...

    spring mvc 参数绑定漏洞

    3. **默认配置不当**:Spring MVC的默认配置可能允许过于宽松的数据绑定,例如允许空值绑定到非null字段,或者允许任意类型的参数绑定。 针对这些风险,开发者可以采取以下措施来增强Spring MVC应用的安全性: 1. *...

    Spring MVC数据绑定大全.rar

    在Spring MVC框架中,数据绑定是一项核心功能,它允许开发者将HTTP请求参数、模型对象以及视图中的数据关联起来,简化了数据处理的过程。"Spring MVC数据绑定大全.rar"这个压缩包很可能包含了全面讲解Spring MVC数据...

    Mastering Spring MVC 4(2015.09)源码

    拦截器(Interceptor)是Spring MVC中的一种机制,可以在请求处理前、后执行自定义逻辑。通过实现HandlerInterceptor接口或使用@Interceptor注解,开发者可以添加全局的行为,如日志记录、权限检查等。 此外,...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南 高清可复制版PDF

    除此之外,Spring MVC还支持数据绑定、验证、本地化、主题、异常处理等功能。例如,使用@ModelAttribute注解可以将请求参数绑定到Controller方法的参数上,@Valid用于进行数据验证,Validator接口可以自定义验证逻辑...

    Spring MVC数据绑定概述及原理详解

    在Spring MVC中,数据绑定是通过`DataBinder`组件实现的。当一个HTTP请求到达控制器方法时,Spring MVC会自动创建一个`DataBinder`实例,并使用`ConversionService`来处理类型转换和数据格式化。`DataBinder`将请求...

    Spring MVC 4.2.4.RELEASE 中文文档

    通过自定义异常处理器,Spring MVC允许优雅地处理运行时异常,提供了统一的错误页面和异常信息。 **7. RESTful支持** Spring MVC支持构建RESTful服务,通过HTTP方法如GET、POST、PUT、DELETE等,实现资源的增删改查...

    spring-mvc-官方中文文档

    11. **验证**:Spring MVC 集成了 Bean Validation API,允许开发者对模型数据进行校验,通过 @Valid 注解和 ConstraintValidator 实现自定义验证规则。 12. **消息转换**:Spring MVC 提供了 HttpMessageConverter...

    第12章Spring MVC参数绑定的验证

    在Spring MVC中,对于如int、String等基本数据类型的请求参数,Spring MVC会自动将其与控制器方法的参数进行匹配和绑定。例如,一个GET请求中的查询参数`id=123`会被自动绑定到控制器方法的`int id`参数上。 2. **...

    spring MVC_快速入门

    Spring MVC支持自动的数据绑定,可以将请求参数直接绑定到Controller方法的参数上,也可以将表单数据绑定到Java对象。此外,@Valid用于验证模型数据,配合Validator接口实现自定义校验规则。 7. **异常处理** ...

    精通Spring MVC4

    在Spring MVC中,DispatcherServlet作为核心组件负责请求分发,Controller处理请求并返回ModelAndView对象,ViewResolver解析模型数据并渲染视图。 2. **配置与启动** 配置Spring MVC通常涉及web.xml文件中的...

    Spring MVC 切换数据源

    本文将深入探讨如何在Spring MVC中实现数据源的动态切换,以及如何与MySQL数据库协同工作,同时利用MyEclipse作为开发环境。 首先,我们需要理解Spring MVC中的数据源(DataSource)是应用程序连接到数据库的桥梁。...

    《精通Spring MVC 4》源码

    源码中,我们可以看到Spring如何解析请求参数并将其绑定到对象属性上,同时支持自定义转换器和验证器。 此外,Spring MVC的视图解析器是另一个重要部分,它负责找到合适的视图来渲染响应。例如,JSP、Thymeleaf或...

    Spring mvc5.0.3 所有jar包

    在Spring MVC中,可以用于视图解析、数据绑定等方面。 14. **MessageConverter**: Spring MVC使用MessageConverter处理HTTP请求和响应的转换,支持JSON、XML等多种格式。 15. **模板引擎**: Spring MVC支持多种...

    Spring MVC框架的各种依赖包下载

    12. **异常处理**:Spring MVC允许自定义异常处理器,将业务逻辑中抛出的异常转换为用户友好的错误页面。 13. **注解驱动开发**:Spring MVC广泛使用注解,如@Controller、@RequestMapping、@RequestParam等,使得...

    开发Spring MVC应用程序补充—程序源码下载.rar_spring_spring mvc_spring mvc 源码_sp

    标题中的"开发Spring MVC应用程序补充—程序源码下载.rar_spring_spring mvc_spring mvc 源码_sp"表明这是一个关于Spring MVC框架的开发教程,其中包含了源代码供学习者参考。Spring MVC是Spring框架的一个核心组件...

    spring mvc 整合包

    10. **拦截器(Interceptor)**:Spring MVC允许自定义拦截器,实现预处理和后处理功能,例如权限检查、日志记录等。 11. **转换器和格式化器(Converter & Formatter)**:处理请求参数和模型属性之间的类型转换,...

    Mastering Spring MVC 3中文版

    在Spring MVC中,`Model`代表应用程序的数据模型,通常由JavaBean对象构成;`View`负责数据的呈现,可以是HTML、JSP或其他模板技术;`Controller`则是处理用户请求,协调Model和View之间的交互。Spring MVC通过...

    Spring MVC学习框架

    8. **数据绑定与验证**:Spring MVC 提供了数据绑定功能,可以自动将请求参数映射到 Controller 方法的参数。同时,通过 @Valid 和 Validation API 可以实现数据校验。 9. **拦截器(Interceptor)**:拦截器可以在...

Global site tag (gtag.js) - Google Analytics