默认情况下,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()方法的返回值输出就可以了。
相关推荐
在Spring MVC中,数据绑定是一项核心功能,它允许开发者将用户输入的数据与控制器中的对象属性进行关联,简化了数据处理的复杂性。本文将详细介绍Spring MVC中的数据绑定,并提供实例帮助初学者理解。 1. **模型...
3. **默认配置不当**:Spring MVC的默认配置可能允许过于宽松的数据绑定,例如允许空值绑定到非null字段,或者允许任意类型的参数绑定。 针对这些风险,开发者可以采取以下措施来增强Spring MVC应用的安全性: 1. *...
在Spring MVC框架中,数据绑定是一项核心功能,它允许开发者将HTTP请求参数、模型对象以及视图中的数据关联起来,简化了数据处理的过程。"Spring MVC数据绑定大全.rar"这个压缩包很可能包含了全面讲解Spring MVC数据...
拦截器(Interceptor)是Spring MVC中的一种机制,可以在请求处理前、后执行自定义逻辑。通过实现HandlerInterceptor接口或使用@Interceptor注解,开发者可以添加全局的行为,如日志记录、权限检查等。 此外,...
除此之外,Spring MVC还支持数据绑定、验证、本地化、主题、异常处理等功能。例如,使用@ModelAttribute注解可以将请求参数绑定到Controller方法的参数上,@Valid用于进行数据验证,Validator接口可以自定义验证逻辑...
在Spring MVC中,数据绑定是通过`DataBinder`组件实现的。当一个HTTP请求到达控制器方法时,Spring MVC会自动创建一个`DataBinder`实例,并使用`ConversionService`来处理类型转换和数据格式化。`DataBinder`将请求...
通过自定义异常处理器,Spring MVC允许优雅地处理运行时异常,提供了统一的错误页面和异常信息。 **7. RESTful支持** Spring MVC支持构建RESTful服务,通过HTTP方法如GET、POST、PUT、DELETE等,实现资源的增删改查...
11. **验证**:Spring MVC 集成了 Bean Validation API,允许开发者对模型数据进行校验,通过 @Valid 注解和 ConstraintValidator 实现自定义验证规则。 12. **消息转换**:Spring MVC 提供了 HttpMessageConverter...
在Spring MVC中,对于如int、String等基本数据类型的请求参数,Spring MVC会自动将其与控制器方法的参数进行匹配和绑定。例如,一个GET请求中的查询参数`id=123`会被自动绑定到控制器方法的`int id`参数上。 2. **...
Spring MVC支持自动的数据绑定,可以将请求参数直接绑定到Controller方法的参数上,也可以将表单数据绑定到Java对象。此外,@Valid用于验证模型数据,配合Validator接口实现自定义校验规则。 7. **异常处理** ...
在Spring MVC中,DispatcherServlet作为核心组件负责请求分发,Controller处理请求并返回ModelAndView对象,ViewResolver解析模型数据并渲染视图。 2. **配置与启动** 配置Spring MVC通常涉及web.xml文件中的...
本文将深入探讨如何在Spring MVC中实现数据源的动态切换,以及如何与MySQL数据库协同工作,同时利用MyEclipse作为开发环境。 首先,我们需要理解Spring MVC中的数据源(DataSource)是应用程序连接到数据库的桥梁。...
源码中,我们可以看到Spring如何解析请求参数并将其绑定到对象属性上,同时支持自定义转换器和验证器。 此外,Spring MVC的视图解析器是另一个重要部分,它负责找到合适的视图来渲染响应。例如,JSP、Thymeleaf或...
在Spring MVC中,可以用于视图解析、数据绑定等方面。 14. **MessageConverter**: Spring MVC使用MessageConverter处理HTTP请求和响应的转换,支持JSON、XML等多种格式。 15. **模板引擎**: Spring MVC支持多种...
12. **异常处理**:Spring MVC允许自定义异常处理器,将业务逻辑中抛出的异常转换为用户友好的错误页面。 13. **注解驱动开发**:Spring MVC广泛使用注解,如@Controller、@RequestMapping、@RequestParam等,使得...
标题中的"开发Spring MVC应用程序补充—程序源码下载.rar_spring_spring mvc_spring mvc 源码_sp"表明这是一个关于Spring MVC框架的开发教程,其中包含了源代码供学习者参考。Spring MVC是Spring框架的一个核心组件...
10. **拦截器(Interceptor)**:Spring MVC允许自定义拦截器,实现预处理和后处理功能,例如权限检查、日志记录等。 11. **转换器和格式化器(Converter & Formatter)**:处理请求参数和模型属性之间的类型转换,...
在Spring MVC中,`Model`代表应用程序的数据模型,通常由JavaBean对象构成;`View`负责数据的呈现,可以是HTML、JSP或其他模板技术;`Controller`则是处理用户请求,协调Model和View之间的交互。Spring MVC通过...
8. **数据绑定与验证**:Spring MVC 提供了数据绑定功能,可以自动将请求参数映射到 Controller 方法的参数。同时,通过 @Valid 和 Validation API 可以实现数据校验。 9. **拦截器(Interceptor)**:拦截器可以在...