xiaoyao9184/hj-t212-parser

如何在Data中添加自定义字段

zoyaforever opened this issue · 2 comments

    Data data = new Data();

    data.setQn("todo");
    data.setSt("31");
    data.setCn("1101");
    data.setPw("123456");

    CpData cpData = new CpData();
    cpData.setPolId("a34005");
    
    data.setCp(cpData);

请问如何在data或者cpData中添加自定义字段?
比如“reset = 1"这样的命令?

@zoyaforever 你的使用方式已经超出HJ-T212协议的扩展范围,不过仍可以实现;
使用Map对象代替Data和CpData,相应的,对扩展字段的验证也不会受到支持。
你可以参照单元测试,对Map类型的数据进行序列化与反序列化:

@Test
public void readDeepMap() {
String h212 = "##0136ST=32;CN=2011;PW=123456;MN=LD130133000015;CP=" +
"&&DataTime=20160824003817;B01-Rtd=36.91;011-Rtd=231.0,011-Flag=N;060-Rtd=1.803,060-Flag=N&&" +
"4980\r\n";
T212Mapper mapper = new T212Mapper()
.enableDefaultParserFeatures()
.enableDefaultVerifyFeatures();
try {
Map<String,Object> data = mapper.readDeepMap(h212);
assertEquals(data.get("ST"),"32");
assertEquals(data.get("CN"),"2011");
assertEquals(data.get("PW"),"123456");
assertEquals(data.get("MN"),"LD130133000015");
Map<String,String> cp = (Map<String, String>) data.get("CP");
assertEquals(cp.get("DataTime"),"20160824003817");
assertEquals(cp.get("B01-Rtd"),"36.91");
assertEquals(cp.get("011-Rtd"),"231.0");
assertEquals(cp.get("011-Flag"),"N");
assertEquals(cp.get("060-Rtd"),"1.803");
assertEquals(cp.get("060-Flag"),"N");
} catch (Exception e) {
e.printStackTrace();
assert false;
}
}

@Test
public void writeMap() {
String t212 = "##0139ST=32;CN=2011;PW=123456;MN=LD130133000015;CP=" +
"&&DataTime=20160824003817000;B01-Rtd=36.91;011-Rtd=231.0,011-Flag=N;060-Rtd=1.803,060-Flag=N&&" +
"4980\r\n";
t212 = t212.replace(",",";");
t212 = t212.replace("4980","e981");
Map<String,Object> data = new LinkedHashMap<>();
data.put("ST","32");
data.put("CN","2011");
data.put("PW","123456");
data.put("MN","LD130133000015");
Map<String,Object> cp = new LinkedHashMap<>();
data.put("CP",cp);
cp.put("DataTime","20160824003817000");
cp.put("B01-Rtd","36.91");
cp.put("011-Rtd","231.0");
cp.put("011-Flag","N");
cp.put("060-Rtd","1.803");
cp.put("060-Flag","N");
T212Mapper mapper = new T212Mapper()
.enableDefaultParserFeatures()
.enableDefaultVerifyFeatures();
try {
String result = mapper.writeMapAsString(data);
assertEquals(result,t212);
} catch (Exception e) {
e.printStackTrace();
assert false;
}
}

@xiaoyao9184 好的,谢谢