在springboot项目做valid注解校验,但是对象是继承pojo(bean)的DTO类怎么办?

  1. 将校验注解直接添加到 DTO 类的字段上,而不是添加到父类中。修改 DTO 类的字段声明,将校验注解添加到字段上。例如
@Data
@TableName("t_exam_oral")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "ExamOral对象", description = "口腔检测结果表")
public class ExamOral extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 学生id
     */
    @ApiModelProperty(value = "学生id")
    private Long personId;
    /**
     * 设备id
     */
	//注解校验设备id不为空


    @ApiModelProperty(value = "设备id")
    private Long deviceId;
    /**
     * 学生姓名
     */
    @ApiModelProperty(value = "学生姓名")
    private String personName;
    /**
     * 检测批次
     */
    @ApiModelProperty(value = "检测批次")
    private Long batchId;
    /**
     * 学校id
     */
    @ApiModelProperty(value = "学校id")
    private Long schoolId;
    /**
     * 年级
     */
    @ApiModelProperty(value = "年级")
    private Integer grade;
    /**
     * 班级
     */
    @ApiModelProperty(value = "班级")
    private Integer clazz;
    /**
     * 检查人员
     */
    @ApiModelProperty(value = "检查人员")
    private Long checkerId;
    /**
     * 检查人员名称
     */
    @ApiModelProperty(value = "检查人员名称")
    private String checkerName;
    /**
     * 检测序号
     */
    @ApiModelProperty(value = "检测序号")
    private String checkNo;
    /**
     * 检测时间
     */
    @ApiModelProperty(value = "检测时间")
    private LocalDateTime checkTime;
    /**
     * 原始图片链接1;牙齿正面+白光 01
     */
    @ApiModelProperty(value = "原始图片链接1;牙齿正面+白光 01")
    private String originalImage01;
    /**
     * 原始图片链接2;牙齿正面+紫光 02
     */
    @ApiModelProperty(value = "原始图片链接2;牙齿正面+紫光 02")
    private String originalImage02;
    /**
     * 原始图片链接3;牙齿上+白光 03
     */
    @ApiModelProperty(value = "原始图片链接3;牙齿上+白光 03")
    private String originalImage03;
    /**
     * 原始图片链接4;牙齿下+白光 04
     */
    @ApiModelProperty(value = "原始图片链接4;牙齿下+白光 04")
    private String originalImage04;
    /**
     * 原始图片链接5;牙齿上+紫光 05
     */
    @ApiModelProperty(value = "原始图片链接5;牙齿上+紫光 05")
    private String originalImage05;
    /**
     * 原始图片链接6;牙齿下+紫光 06
     */
    @ApiModelProperty(value = "原始图片链接6;牙齿下+紫光 06")
    private String originalImage06;
    /**
     * 处理后的图片链接1;算法处理后牙齿正面+白光 01
     */
    @ApiModelProperty(value = "处理后的图片链接1;算法处理后牙齿正面+白光 01")
    private String processedImage01;
    /**
     * 处理后的图片链接2;算法处理后牙齿正面+紫光 02
     */
    @ApiModelProperty(value = "处理后的图片链接2;算法处理后牙齿正面+紫光 02")
    private String processedImage02;
    /**
     * 处理后的图片链接3;算法处理后牙齿上+白光 03
     */
    @ApiModelProperty(value = "处理后的图片链接3;算法处理后牙齿上+白光 03")
    private String processedImage03;
    /**
     * 处理后的图片链接4;算法处理后牙齿下+白光 04
     */
    @ApiModelProperty(value = "处理后的图片链接4;算法处理后牙齿下+白光 04")
    private String processedImage04;
    /**
     * 处理后的图片链接5;算法处理后牙齿上+紫光 05
     */
    @ApiModelProperty(value = "处理后的图片链接5;算法处理后牙齿上+紫光 05")
    private String processedImage05;
    /**
     * 处理后的图片链接6;算法处理后牙齿下+紫光 06
     */
    @ApiModelProperty(value = "处理后的图片链接6;算法处理后牙齿下+紫光 06")
    private String processedImage06;
    /**
     * 牙齿类型
     */
    @ApiModelProperty(value = "牙齿类型")
    private String toothType;
    /**
     * 治疗建议
     */
    @ApiModelProperty(value = "治疗建议")
    private String treatmentSuggestion;
    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    private String remarks;


}

将 DTO 对象强制转换为 POJO 对象,并且 POJO 对象的字段与 DTO 对象的字段相对应,并且 DTO 对象上的校验已经通过,那么在进行强制转换后,字段信息应该会被正确地赋值给 POJO 对象。

在进行强制转换时,会根据字段名称和类型进行匹配,并将 DTO 对象中的字段值赋给对应的 POJO 对象字段。只要字段名称和类型匹配,字段信息应该不会丢失。

但是,请注意以下几点:

  1. 强制类型转换存在风险,如果 DTO 对象和 POJO 对象之间的字段结构不完全相同,或者字段类型不兼容,将会导致强制转换失败,抛出 ClassCastException 异常。

  2. 如果在 DTO 对象中添加了额外的字段,这些额外字段在强制转换时会被忽略,不会被赋值给 POJO 对象。

所以,如果你确保 DTO 对象的字段与 POJO 对象的字段名称和类型完全一致,并且需要将 DTO 数据存入数据库,那么进行强制转换可能是一个方便的方法。但是请务必在进行转换之前,仔细检查字段的一致性,以避免出现类型不匹配的问题。

猜你喜欢

转载自blog.csdn.net/weixin_42759398/article/details/131516336