业务场景:一个房产交易系统中的业务需求,查询房屋交易状态接口,调用第三方接口返回一个vo对象,该对象的属性主要是描述该房屋的交易情况,比如是否抵押,是否被查封等,现在需要利用该对象的值决定返回给调用方的返回值。(现在一个对象中有很多个属性,大部分属性的值影响返回结果)
代码:
vo对象:
@Data
public class BDCQZTXX {
private String fwbm;//房屋编码
private String bdcdyh;//不动产单元号
private String xzqhdm;//行政区划代码
private String sfybdy;//是否ybdy
private String sfzgedy;//是否zgedy
private String sfzjgcdy;//是否在建工程抵押
private String sfcf;//是否查封
private String sfycf;//是否预查封
private String sfyg;//是否预购
private String sfydy;//是否预抵押
private String sfyy;//是否异议
private String sfdy;//是否抵押
private String sfsd;//是否sd
private String sfdj;//是否登记
private String sfzdzr;//是否zdzr
private String sfzbyw;//是否在办业务
private String bz;//备注
.
.
.
模拟业务处理(测试)
public static void main(String[] args){
//模拟调用接口返回的对象数据
String s = "{\n" +
" \"fwbm\": \"1\",\n" +
" \"bdcdyh\": \"1\",\n" +
" \"xzqhdm\": \"1\",\n" +
" \"sfdy\": \"0\",\n" +
" \"sfzjgcdy\": \"0\",\n" +
" \"sfcf\": \"0\",\n" +
" \"sfyg\": \"0\",\n" +
" \"sfydy\": \"0\",\n" +
" \"sfyy\": \"0\",\n" +
" \"sfdyi\": \"0\",\n" +
" \"sfsd\": \"0\",\n" +
" \"sfdj\": \"0\",\n" +
" \"sfzdzr\": \"0\",\n" +
" \"sfzbym\": \"0\",\n" +
" \"bz\": \"\"\n" +
" }";
//是否可售(0不可售1可售)
int sfks = 1;
//json字符串转对象(fastjson)
BDCQZTXX bdcqztxx =JSONObject.parseObject(s, BDCQZTXX.class);
//遍历对象的字段数组
for (Field f : bdcqztxx.getClass().getDeclaredFields()) {
f.setAccessible(true);//表示反射对象是否抑制java语言访问
String name = f.getName();//获取字段名称
Object value = f.get(bdcqztxx);//获取对应字段的值
Class<?> type = f.getType();//获取对应字段的类型
System.out.println(type);
//不需要判断的字段
if ("FWBM".equals(name) ||
"BDCDYH".equals(name) ||
"BZ".equals(name) ||
"XZQHDM".equals(name)) {
System.out.println("当前不影响判断的字段为 "+name + ":" + value);
continue;
}
System.out.println("当前影响判断的字段为 "+name + ":" + value);
//需要判断的字段
if ("1".equals(String.valueOf(value))) {
//0为不可售
sfks = 0;
break;
}
}
if (sfks == 1) {
System.out.println("可售");
}
if (sfks == 0) {
System.out.println("不可售");
}
}
.
.
.
就此完成!!!