类 FieldMapper

java.lang.Object
com.midi.his.sdk.mapper.FieldMapper

public final class FieldMapper extends Object
报文字段(UPPER_SNAKE)与 DTO 属性(lowerCamel)之间的双向映射。

规则刻意保持简单可逆:EXAM_MCLASS_CODE <-> examMclassCode。命名不符合该规则时, 用 HisField 在属性上标注真实字段名;标注值会统一去空白并转大写,与报文名同一口径。

构建映射表时对以下三种情况直接抛 HisProtocolException,不会静默丢掉字段: 属性名含连续大写(缩写词推不出真实字段名)、@HisField 取值去空白后为空、 两个不同名属性映射到同一个报文名。子类与父类的同名属性属于字段遮蔽,只保留子类属性。

每个类的映射表在首次使用时构建并缓存,之后只读,因此本类是线程安全的。 SDK 的 DTO 一律用 String 承载报文中,映射过程不做任何类型转换。

  • 方法详细资料

    • toObject

      public static <T> T toObject(Map<String,String> fields, Class<T> type)
      把一行报文数据装进 DTO。
      类型参数:
      T - 目标类型
      参数:
      fields - 报文字段表,键为大写下划线字段名
      type - 目标类型,必须有不带参数的构造器
      返回:
      填充后的对象;fields 为 null 或空时返回 null
      抛出:
      HisProtocolException - 目标类不可实例化,或字段类型不是 String
    • toFields

      public static Map<String,String> toFields(Object dto)
      把 DTO 转成按声明顺序排列的报文字段表,值为 null 的属性不输出。
      参数:
      dto - 数据传输对象
      返回:
      有序字段表
      抛出:
      HisProtocolException - 反射失败
    • fieldNames

      public static List<String> fieldNames(Class<?> type)
      报文字段名形式的属性清单,用于校验必填项。
      参数:
      type - DTO 类型
      返回:
      字段名列表,按声明顺序
    • toCamel

      public static String toCamel(String name)
      UPPER_SNAKE 转 lowerCamel。
      参数:
      name - 报文字段名
      返回:
      属性名
    • toUpperSnake

      public static String toUpperSnake(String name)
      lowerCamel 转 UPPER_SNAKE,逐字母转换,是 toCamel(java.lang.String) 的逆运算 (EXAM_I_D <-> examID)。缩写词的真实报文名无法由属性名推出,映射时须用 HisField 标注,映射表不会替调用方猜。
      参数:
      name - 属性名
      返回:
      报文字段名