Spring对象绑定与类型转换

Spring的框架体系中,到处充斥着对象绑定从bean的初始化autowired属性,SpringMvc 中对对象的绑定等。Spring对象绑定和类型转换在Spring体系中发挥着至关重要的作用。其对象绑定是通过属性编辑器体现来完成,类型转换是通过Spring 3.0以后引入的全新框架。属性编辑器也能实现部分类型转换的功能,但主要是对象类型跟String类型之间的转换。全新而类型转换框架ConversionService则是实现任意类型之间的转换,一个更通用更灵活的框架。

1. 属性编辑器:

public class TestWrapper {
private TestBean testBean; public void setTestBean(TestBean testBean) {
this.testBean = testBean;
} public TestBean getTestBean() {
return testBean;
}
}
public class TestBeanEditor extends PropertyEditorSupport{
@Override
public void setAsText(String text) throws IllegalArgumentException {
TestBean testBean = new TestBean();
StringTokenizer st = new StringTokenizer(text,"-");
testBean.setName(st.nextToken());
testBean.setPassword(st.nextToken());
testBean.setAge(Integer.parseInt(st.nextToken()));
setValue(testBean);
}
}
TestWrapper testBean = new TestWrapper();
BeanWrapper beanWrapper = new BeanWrapperImpl(testBean);
beanWrapper.registerCustomEditor(TestBean.class,new TestBeanEditor());
beanWrapper.setPropertyValue("testBean","aa-bb-12");
System.out.println(testBean.getTestBean().toString());

2. 类型转换器:

我们经常会遇到的一种场景,根据ID查找实体对象,通常从前端传入实体的ID,后台接收到ID后,我们接收参数,然后查询数据库获取实体对象。在这类型转换器也能轻松办到。

public class User {
private String name;
private String password; public String getName() {
return name;
} public String getPassword() {
return password;
} public User(String name, String password){
this.name = name;
this.password = password;
} public static User findUser(String name){
return UserPools.findByUsername(name);
}
}

注意,findUser是关键方法,且必须为静态方法。不需要对象便可调用,参数必须为ID。

@RequestMapping("/user")
public User getUser(@RequestParam("user") User user){
return user;
}
mockMvc.perform(MockMvcRequestBuilders.post("/user")
.contentType(MediaType.APPLICATION_JSON_UTF8).param("user","zhangsan")).andExpect(
MockMvcResultMatchers.content().json(JSON.toJSONString(UserPools.findByUsername("zhangsan")))
);

当然,Spring内置了大量常用的类型转换器,本文不详细阐述。

Spring对象绑定与类型转换的更多相关文章

  1. spring mvc绑定参数之 类型转换 有三种方式:

    spring mvc绑定参数之类型转换有三种方式: 1.实体类中加日期格式化注解(上次做项目使用的这种.简单,但有缺点,是一种局部的处理方式,只能在本实体类中使用.方法三是全局的.) @DateTim ...

  2. 【SpringMVC】SpringMVC系列7之POJO 对象绑定请求参数值

      7.POJO 对象绑定请求参数值 7.1.概述 Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值.而且支持级联属性.如:dept.deptId.dept ...

  3. 使用 POJO 对象绑定请求参数

    概述 Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值并且支持级联属性.这一特性在日常开发过程中使用频率比较高,开发效率也高,本文主要对 POJO 对象绑定 ...

  4. 0060 Spring MVC的数据类型转换--ConversionService--局部PropertyEditor--全局WebBindingInitializer

    浏览器向服务器提交的数据,多是字符串形式,而有些时候,浏览器需要Date.Integer等类型的数据,这时候就需要数据类型的转换器 使用Spring的ConversionService及转换器接口 下 ...

  5. SSRS用自定义对象绑定报表

    有一个报表的数据源是一个对象的List, 这个对象List中还有层级,其中还有其他的对象List,这样的层级有三层.其数据是从数据库中取出来的.其LINQ的操作太多了而且复杂,所以不太可 能从LINQ ...

  6. WinForm程序用使用List对象绑定DataGridView数据源

    1. 在用List<T>对象绑定DataGridView数据源属性的时候,数据源的内容不会动态更新,如果List<T>对象集合中的数据发生变化,那么数据控件的数据源是不会得到更 ...

  7. JQuery 多个ID对象绑定一个click事件

    一.表单的多个radio对象绑定click: $("#ImgRadio :radio").click(function(){ func(); });

  8. 给js动态创建的对象绑定事件

    1.使用原生JS动态为动态创建的对象绑定事件 1-1.创建一个function,用来兼容IE8以下浏览器添加事件 function addEvent(el, type, fn) {  if(el.ad ...

  9. python 给对象绑定属性和方法和__slots__的使用

    # 以c语言为主是静态语言,运行之前先编译,在运行的过程中不允许编辑代码# 在运行的过程中,可以改变,可以添加属性,就是属于动态语言(python) # python动态的添加属性以及方法class ...

随机推荐

  1. flash builder关掉自动编译功能

    菜单栏 项目,里面有个自动构建,把√去掉就ok了

  2. AppcompatActivity闪退问题解决方案

    apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0. ...

  3. Swift 遍历数组元素

    ..<Array.count { Array[index] } for (index, element) in Array.enumerate() { print(("\(index+ ...

  4. 使用JMeter进行负载测试——终极指南

    这篇教程讨论的是JMeter,它是一款基于Java的.集合了几个应用程序.具有特定用途的负载和性能测试工具. 本篇主要涉及的内容: 解释一下JMeter的用途 JMeter的实现方式以及采用的技术 安 ...

  5. 《Java程序设计》课程准备之问卷调查

    一.你对自己的未来有什么规划?做了哪些准备? 答:未来就是找个好工作,在保证自己与父母生活条件良好的基础上,进一步的提高精神上的需求.如:旅游度假,支持更多业余爱好等.准备就是:好好学习,好好运动,好 ...

  6. STL学习之路

    本文面向的读者:学习过C++程序设计语言(也就是说学习过Template),但是还没有接触过STL的STL的初学者.这实际上是我学习STL的一篇笔记,老鸟就不用看了. 什么是泛型程序设计 我们可以简单 ...

  7. Oracle一个中文汉字占用几个字节

    Oracle 一个中文汉字 占用几个字节,要根据Oracle中字符集编码决定   查看oracle server端字符集 select userenv('language') from dual; 如 ...

  8. 关于collapsed margin(外边距合并)

    这是前面写postion定位时写到最后面的例子的时候发现的一个问题,于是专门写一篇随笔来解释记录一下,毕竟两个知识点同时写在一篇文章里面有点混乱的感觉.. 上篇随笔position定位遇到的问题在这里 ...

  9. VMware12 安装 CentOS 6.5 64位

    前言:本人在配置Hadoop的过程中,需要搭建Cent OS 64 环境,借此,顺便将Cent OS 64 的安装在此记录,方便自己,也方便大家学习.本次是在VM12虚拟机中实现Cent OS 64 ...

  10. WPF RichTextBox,关键字搜索,样式改变,超链接替换,图文混排

    RichTextBox 只是一个控件,表示对 FlowDocument 对象执行操作的丰富编辑控件.它所承载的内容由其 Document 属性来呈现. Document 是一个 FlowDocumen ...