借助Spring工具类如何实现支持数据嵌套的赋值操作
1. Student类
package com.lonely.test; import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; import java.util.List; /**
* @author ztkj-hzb
* @Date 2019/9/24 10:48
* @Description
*/
@Data
public class School { private String schoolName; private Clazz clazz; private List<Teacher> teachers; @Data
@AllArgsConstructor
@NoArgsConstructor
public static class Clazz { private String clazzName; private List<Student> students;
} @Data
@AllArgsConstructor
@NoArgsConstructor
public static class Student { private String stuName; private Integer age;
} @Data
@AllArgsConstructor
@NoArgsConstructor
public static class Teacher{ private String teacherName; private List<Student> students;
} }
2. 通过以下方法给该对象赋值
public static void main(String[] args) {
School school = new School();
BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(school);
//todo 这句话很重要,取值可以不用设置,但是赋值一定需要,因为他的作用是在对象属性为null时,会帮你new一个,避免了空指针异常
beanWrapper.setAutoGrowNestedPaths(true);
//赋值操作,操作方法属性.属性的方式,如果是集合或者是数组,使用下标 xx[0]. 的方式,根据我目前的测试,暂时无法支持Set,可能因为Set
//无索引操作吧
beanWrapper.setPropertyValue("schoolName","无敌高中");
beanWrapper.setPropertyValue("clazz.clazzName","终极一班");
beanWrapper.setPropertyValue("clazz.students[0].stuName","lonely");
beanWrapper.setPropertyValue("clazz.students[0].age",18);
beanWrapper.setPropertyValue("clazz.students[1].stuName","dugu");
beanWrapper.setPropertyValue("clazz.students[1].age",20);
beanWrapper.setPropertyValue("teachers[0].teacherName","teacher1");
beanWrapper.setPropertyValue("teachers[0].students[0].stuName","学生One");
beanWrapper.setPropertyValue("teachers[0].students[0].age",20);
beanWrapper.setPropertyValue("teachers[0].students[1].stuName","学生Two");
beanWrapper.setPropertyValue("teachers[0].students[1].age",25);
System.out.println(school);
//取值,跟赋值类似
System.out.println(beanWrapper.getPropertyValue("teachers[0].teacherName"));
}
3. 以上demo只是测试使用而已,本人在公司需要的场景下写了一些工具类,包括了如何根据指定的参数类型,构建一个Class对象,将结果Map格式的数据,转换成实体Bean中,支持嵌套赋值,更有满足公司场景的左右赋值需要,即根据前端配置的赋值表达式,将右侧的值成功赋值给左侧的对象中,目前还是在尝试研发中,需要Demo的可以在以下的Github中下载。https://github.com/duguxiaobiao/generator-code
借助Spring工具类如何实现支持数据嵌套的赋值操作的更多相关文章
- spring 工具类大集合
接以前的文章 apache-commons 常用工具类 和文章 apache-commons 工具类扩展 小家 Spring 对 spring 的工具类做了详细的介绍(一) 这里我抽出一些好用的类,不 ...
- Spring工具类 非spring管理环境中获取bean及环境配置
SpringUtils.java import org.springframework.beans.BeansException; import org.springframework.beans.f ...
- JDBC JdbTemplate&NamedParameterJdbcTemplate(Spring工具类)
使用该工具类需要从spring开发包中导入spring.jar和commons-logging.jar,这个模板是线程安全的. JdbcTemplate: public class JdbcTem ...
- java springboot调用第三方接口 借助hutoool工具类 爬坑
楼主是个后端小白一枚,之前没接触过后端,只学了java基本语法,还是在学校老师教的,学的很浅,什么ssh.ssm框架都没有学,最近在自学spring boot,看书学也看不是很懂,就在b站上看教学视频 ...
- 使用POI导出EXCEL工具类并解决导出数据量大的问题
POI导出工具类 工作中常常会遇到一些图表需要导出的功能,在这里自己写了一个工具类方便以后使用(使用POI实现). 项目依赖 <dependency> <groupId>org ...
- Spring工具类:WebApplicationContextUtils
当 Web 应用集成 Spring 容器后,代表 Spring 容器的WebApplicationContext对象将以 WebApplicationContext.ROOT_WEB_APPLICAT ...
- Java并发工具类之线程间数据交换工具Exchanger
Exchanger是一个用于线程间协做的工具类,主要用于线程间的数据交换.它提供了一个同步点,在这个同步点,两个线程可以彼此交换数据.两个线程通过exchange方法交换数据,如果一个线程执行exch ...
- 利用BeanUtils工具类封装表单数据
一.BeanUtils工具类的使用 1.首先导入BeanUtils工具类的jar包 commons-beanutils-1.8.0.jar commons-logging-1.1.1.jar 2.se ...
- spring工具类获取bean
import org.springframework.web.context.ContextLoader; import org.springframework.web.context.WebAppl ...
随机推荐
- JS微信网页使用图片预览(放大缩小)
前言 需求在微信网页中客户点击图片可进行预览放大缩小功能,网上找了各种js方式实现, 唯一的麻烦就是不兼容或者和项目框架不兼容 次函数只只用于部分客户端,否则会出现 WeixinJSBridge is ...
- C#压缩打包文件
该控件是使用csharp写的,因此可以直接在dotnet环境中引用,不需要注册. 利用 SharpZipLib方便地压缩和解压缩文件最新版本的SharpZipLib(0.84)增加了很多新的功能,其中 ...
- iOS-UIAlertView与UIActionSheet
UIAlertView与UIActionSheet 6.11.1 常规调用 UIAlertView:调出一个模态对话框,屏幕居中显示 UIActionSheet:非模态对话框,屏幕下方弹出 Alert ...
- 【C# 开发技巧】 Application.DoEvents( ) 使用笔记
该方法可以处理当前队列的消息,比如一个for循环 5000次 向TextBox中追加文本,那肯定会假死一会儿的. 此时便可使用Application.DoEvents()来处理队列的信息. 简单说下使 ...
- Flutter FutureBuilder异步请求列表示例
Flutter的FutureBuilder列表示例 import 'package:flutter/material.dart'; import '../service/service_method. ...
- 【链接】js监听input输入框内容变化
https://blog.csdn.net/idomyway/article/details/79078625 $("#input1").bind("input prop ...
- python 实现快速排序(面试经常问到)
# -*- coding: UTF-8 -*- # 递归实现, 把过程打印出来便于理解 def quick_sort1(lis, start, end): if start >= end: re ...
- with as用法 --Python
有些任务,可能事先设置,时候做清理工作,如下面一段程序: f = open('tmp.txt') data = f.read() print(data) 是不是忘了什么?没错,很明显忘记关闭文件句柄. ...
- 7个步骤让PC网站自动适配手机网页
传统的网站如何完成向移动设备的快速转型? 通过移动适配技术可以实现,切图网是国内首家基于web技术服务的公司,而移动适配主要通过底层的web技术开发手段来完成,下面切图网将从技术角度来告诉你通过7个步 ...
- [转帖]超详细的Oracle数据库在不同损坏级别的恢复总结
超详细的Oracle数据库在不同损坏级别的恢复总结 原创 波波说运维 2019-07-20 00:02:00 概述 在 DBA 的日常工作中不可避免存在着数据库的损坏,今天主要介绍 Oracle 数据 ...