我正在使用Opendaylight(oxygen-sr4)开发一个项目。我通过Yang定义了对象。 .yang
个文件,例如:grouping person{ leaf enName{ type string; } leaf zhName{ type string; } }
当我将一个人对象传输到前端时,如果field的值为null,我发现field缺少问题。
我需要:{"person":{"enName":"allen","zhName":null}}
,但是我得到了:{"person":{"enName":"allen"}})
我调试了项目。我发现问题是在序列化Person.java
模块下的DataNodeContainerSerializerSource
人对象(mdsal-binding-dom-codec
由Yang自动生成)时
生成匿名序列化方法,并添加了null
检查,如下所示:
java.lang.String getZhName = ((java.lang.String) _input.getZhName());
if (getZhName != null) {
_stream.leafNode("zhName",getZhName);
}
org.opendaylight.mdsal.binding.dom.codec.gen.impl.DataNodeContainerSerializerSource
生成的匿名序列化方法:
private void emitChild(final StringBuilder sb, final String getterName, final Type childType,
final DataSchemaNode schemaChild) {
sb.append(statement(assign(childType, getterName, cast(childType, invoke(INPUT, getterName)))));
sb.append("if (").append(getterName).append(" != null) {\n");
emitChildInner(sb, getterName, childType, schemaChild);
sb.append("}\n");
}
有什么方法可以传输空值字段?通过修改.yang
文件的配置?还是通过创建扩展DataNodeContainerSerializerSource
的自定义类?
顺便说一句,我发现DataNodeContainerSerializerSource
已过时。