之前在做REST方面的开发,数据传输格式使用JSON,遇到一些很麻烦的事:接收的数据并非标准格式的JSON或者不知道标准格式,比如:{"id":null, "name":null},这样在JSON与对象的相互转换就会出现异常,所以我想在对象转换前后将对象中的属性值替换,变产生了以下代码。
public static Object checkObjectFieldValue(Object obj)
throws IllegalArgumentException, IllegalAccessException,
InvocationTargetException {
if (obj != null) {
Class<? extends Object> classz = obj.getClass();
Field fields[] = classz.getDeclaredFields();
for (Field field : fields) {
try {
Type t = field.getGenericType();
if (t.equals(String.class)) {
Method m = classz.getMethod("get"
+ change(field.getName()));
Object name = m.invoke(obj);
if (name == null) {
Method mtd = classz.getMethod(
"set" + change(field.getName()),
new Class[] { String.class });
mtd.invoke(obj, new Object[] { "" });
}
}
if (t.equals(Long.class)) {
Method m = classz.getMethod("get"
+ change(field.getName()));
Object name = m.invoke(obj);
if (name == null) {
Method mtd = classz.getMethod(
"set" + change(field.getName()),
new Class[] { Long.class });
mtd.invoke(obj, new Object[] { 0l });
}
}
if (t.equals(Integer.class)) {
Method m = classz.getMethod("get"
+ change(field.getName()));
Object name = m.invoke(obj);
if (name == null) {
Method mtd = classz.getMethod(
"set" + change(field.getName()),
new Class[] { Integer.class });
mtd.invoke(obj, new Object[] { 0 });
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
return obj;
}
/**
* @param str 源字符串
* @return
*/
public static String change(String str) {
if (str != null) {
StringBuffer sb = new StringBuffer(str);
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
return sb.toString();
} else {
return null;
}
}
如果有什么错误希望指正,其实我想在servlet就对其进行过滤,但不知道如何下手,请高手指点。
分享到:
相关推荐
1. **分配内存**:JVM会在堆内存中为新创建的对象分配内存空间。分配内存时,会考虑对象所需的大小,包括实例变量的空间以及对齐填充等。如果内存不足,可能会抛出`OutOfMemoryError`异常。 2. **设置初始值**:为...
每当创建新对象时,运行库会在托管堆中为其分配连续的内存空间,并保持一个指针记录最后分配的位置。一旦托管堆的可用空间不足,垃圾回收器就会启动,扫描整个托管堆,识别不再被任何活动代码引用的对象(即垃圾),...
当使用new操作符来创建引用类型对象时,实际上是在内存中为新对象分配了一块区域,并将引用(指针)保存在变量中。 除了使用new操作符,还有其他两种方式可以创建对象:使用{}和使用构造函数。使用{}是一种更简化的...
- `sField` 表示字段名称,在此例中为 `[XZQHMC]`。 - `a` 用于存储格式化后的序列号字符串。 #### 2. 字典操作 ```vba If (i = 0) Then Set d = CreateObject("Scripting.Dictionary") End If ``` - 如果是第一次...
我们可以通过`getAttributeValue()`方法获取属性值,例如: ```java public SettingItemView(Context context, AttributeSet attrs) { super(context, attrs); // 解析自定义属性 TypedArray a = context....
- 使用属性动画替换视图动画,因为前者可以真正改变对象状态,且更适合复杂的动画需求。 - 利用硬件加速来提高动画性能,可以通过在AndroidManifest.xml中为Activity设置`android:hardwareAccelerated="true"`属性...
- 替代触发器(`INSTEAD OF`)允许对视图或对象类型的行级别操作进行替换处理,即当对这些视图或对象类型的行执行INSERT、UPDATE或DELETE操作时,触发器将替代执行相应的触发器代码,而不是直接对基础表进行操作。...
以数据表参数化为例,用户可以将脚本中的固定值替换为数据表中的参数,这样,一个测试脚本就可以应用于不同的输入数据,从而实现更全面的测试覆盖。 例如,在通信技术的登录页面,可以将用户名“userinfo.userName...
继承允许一个类(子类)继承另一个类(父类)的属性和方法;多态则是指同一个接口,使用不同的实例而产生不同的效果。 2. **String 类型**:String 不是 Java 的基本数据类型,而是对象,属于引用类型。它是一个 ...
4. **构造函数**:通常需要覆盖默认的构造函数,以处理从XML布局传入的属性值。这可以通过调用`super(context, attrs)`或`super(context, attrs, defStyleAttr)`完成,根据是否需要兼容旧版本的Android。 5. **在...
- **使用别名**:在 SQL 查询中为字段定义别名,使其与实体类属性名称匹配。 - **使用 resultMap**:通过 resultMap 映射配置文件,指定实体类属性与表字段之间的映射关系。 ### 8. 模糊查询 like 语句的编写 - **...
`:这是列表切片操作,设置步长为2,将所有偶数索引的元素设置为指定值,例如`a[::2] = [6, 7]`后,a变为`[6, 2, 7, 4, 5]`。 - `a[-2:] = ?`:获取列表倒数第二个到最后一个元素,例如`a[-2:]`在原列表中为`[4, 5]...
JavaScript是一种广泛应用于Web开发的脚本语言,它在网页中为用户提供动态交互体验。这个"JavaScript_这些被用作RareSkillsio和Udemy天然气优化课程的实践作业.zip"文件包,显然包含了与JavaScript相关的实践练习,...
例如,在上一个示例中,当执行 `number1 = 5` 时,Python会在内存中为 `number1` 分配空间,并将整数5的值存储在那里。 #### 2.5 算术运算 Python支持多种基本的算术运算,包括加法 (`+`)、减法 (`-`)、乘法 (`*`)...
接着,在OnInitDialog()函数中,你可以设置滑动条的属性,如最小值、最大值、刻度数目等。 重绘SliderCtrl的过程涉及到了消息映射和OnPaint()函数的处理。首先,你需要在类的声明(CustomSliderCtr.h)中定义一个新...
Object类是所有Java类的根类,提供的toString()方法返回的通常是对象的类名和哈希码,而重写toString()方法是为了返回对象的实际信息,如对象的属性值。重写时的具体格式内容应根据当前类的设计需求而定。 equals()...
这个补丁文件通常包含一系列操作,如添加、删除或替换JSON对象的属性。在C#环境中,我们可以利用.NET框架提供的Json.NET库或者System.Text.Json库来实现这一功能。 Json.NET是C#中广泛使用的JSON处理库,它提供了...
这包括对象动画(ObjectAnimator)、值动画(ValueAnimator)以及动画集合(AnimatorSet)。这些工具可以用来改变TextView的多种属性,如大小、颜色、透明度等,实现动态效果。 例如,你可以使用ObjectAnimator来...