`
liugang594
  • 浏览: 981616 次
  • 性别: 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 框架中提供的一种强大的数据绑定机制,通过 PropertyEditor 机制可以实现多种数据类型的绑定。开发者可以根据需要注册自定义的 PropertyEditor,以实现特定的数据绑定需求。

    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 4.2.4.RELEASE 中文文档

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

    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-官方中文文档

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

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

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

    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)**:拦截器可以在...

    spring MVC文档

    在Spring MVC中,模型绑定和数据验证是两个重要的概念。通过@ModelAttribute注解,可以将请求参数绑定到控制器方法的参数上。数据验证则可以通过JSR-303/JSR-349标准的校验注解实现,如@NotNull、@Size等。 此外,...

    Spring MVC Cookbook(PACKT,2016).pdf

    《Spring MVC Cookbook》是由PACKT Publishing在...通过这本书,开发者可以系统地学习Spring MVC的各个方面,提升在实际项目中的应用能力。无论你是初学者还是有经验的开发者,都可以从中获得宝贵的实践经验和技巧。

    spring mvc json&&jackson jquery js

    它与Spring框架紧密结合,提供了模型-视图-控制器(MVC)架构,使得开发人员能够轻松地处理HTTP请求、数据绑定和视图渲染。在这个项目中,我们看到与JSON、Jackson库、jQuery和JavaScript相关的元素,这些都是在现代...

    Spring MVC 学习笔记 十一 data binding

    在Web开发中,Spring MVC框架为我们提供了一种高效的数据绑定机制,使得控制器(Controller)能够方便地将用户提交的表单数据与Java对象进行映射,简化了处理HTTP请求和响应的过程。本学习笔记将深入探讨Spring MVC...

Global site tag (gtag.js) - Google Analytics