java实体类中有枚举类型_当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出?...

本文介绍了一种解决枚举值在模板渲染中避免大量if判断的方法。通过创建一个`CodeEnum`接口,让枚举类实现该接口并提供`getCode()`方法。然后创建一个`EnumUtil`工具类,用于根据代码值获取枚举对象。在DTO类中,使用`@JsonIgnore`注解的辅助方法将整型状态转换为枚举对象,使得模板可以直接调用`message`属性展示枚举信息。这种方法提高了代码的可维护性和可读性。

当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出?

问题:

orderStatus 和 payStatus都是枚举类,并且枚举的个数达地10来个,我们不可能在模板页面(jsp/ftl/html)等页面进行多大10多项的if判断,去一个一个的判断值,假如以后随着业务的增多,枚举个数越来越多,改怎么办?

/**订单*/

@Data //get/set

//将值是null的数据剔除

@JsonInclude(JsonInclude.Include.NON_NULL)

public class OrderDTO {

private String orderId;

/**买家名字**/

private String buyerName;

/**买家手机**/

private String buyerPhone;

/**买家地址**/

private String buyerAddr;

/**用户openid**/

private String buyerOpenid;

/**订单金额**/

private BigDecimal buyerAmount;

/**订单状态, 默认状态0新订单**/

private Integer orderStatus;

/**支付状态, 默认状态0等待支付**/

private Integer payStatus;

private Date createTimestamp;

private Date updateTimestamp;

List orderDetailList;

}

解决方法:

思路:

1,新建一个interface的接口类:codeEnum,其方法有一个:Integer getCode();

注意,因为每个枚举实体中都会有一个: Integer code的属性,所以适用.

2.在建一个公用的EnumUtil公具类,将code值,和枚举类(泛型)传入其中,并且在返回类型中对枚举进行说明,限制其必须是实现codeEnum的getCode方法

比如: T 这样就能调用 getCode方法

3.所有枚举类需要实现codeEnum类,及其getCode方法

大概思路有了,那么代码:

codeEnum.java

public interface CodeEnum {

Integer getCode();

}

OrderStatusEnum.java

@Getter //get/set

public enum OrderStatusEnum implements CodeEnum {

NEW(0, "新订单"),

FINISHED(1, "完结"),

CANCEL(2, "取消");

private Integer code;

private String message;

OrderStatusEnum(Integer code, String message) {

this.code = code;

this.message = message;

}

}

PayStatus.java

@Getter //get

public enum PayStatusEnum implements CodeEnum {

WAIT(0, "等待支付"),

SUCCESS(1, "支付完成");

private Integer code;

private String message;

PayStatusEnum(Integer code, String message) {

this.code = code;

this.message = message;

}

}

EnumUtil.java

public class EnumUtil {

/**

* 1.Class enumClass枚举类

* 2.对枚举的说明,enumClass需要继承CodeEnum,才能调用each.getCode()方法

* @param code

* @param enumClass

* @param

* @return

*/

public static T getByCode(Integer code, Class enumClass)

{

for (T each: enumClass.getEnumConstants())

{

if(code.equals(each.getCode()))

{

return each;

}

}

return null;

}

}

然后在DTO实体类中可以这样写了

/**

* 当orderDTO转成json格式时,是多出getOrderStatusEnum字段,

* 此注解表示屏蔽此字段的输出

**/

@JsonIgnore

public OrderStatusEnum getOrderStatusEnum()

{

return EnumUtil.getByCode(orderStatus, OrderStatusEnum.class);

}

/**

* 当orderDTO转成json格式时,是多出getOrderStatusEnum字段,

* 此注解表示屏蔽此字段的输出

**/

@JsonIgnore

public PayStatusEnum getPayStatusEnum()

{

return EnumUtil.getByCode(payStatus, PayStatusEnum.class);

}

完成代码:

/**订单*/

@Data //get/set

//将值是null的数据剔除

@JsonInclude(JsonInclude.Include.NON_NULL)

public class OrderDTO {

private String orderId;

/**买家名字**/

private String buyerName;

/**买家手机**/

private String buyerPhone;

/**买家地址**/

private String buyerAddr;

/**用户openid**/

private String buyerOpenid;

/**订单金额**/

private BigDecimal buyerAmount;

/**订单状态, 默认状态0新订单**/

private Integer orderStatus;

/**支付状态, 默认状态0等待支付**/

private Integer payStatus;

private Date createTimestamp;

private Date updateTimestamp;

List orderDetailList;

/**

* 当orderDTO转成json格式时,是多出getOrderStatusEnum字段,

* 此注解表示屏蔽此字段的输出

**/

@JsonIgnore

public OrderStatusEnum getOrderStatusEnum()

{

return EnumUtil.getByCode(orderStatus, OrderStatusEnum.class);

}

/**

* 当orderDTO转成json格式时,是多出getOrderStatusEnum字段,

* 此注解表示屏蔽此字段的输出

**/

@JsonIgnore

public PayStatusEnum getPayStatusEnum()

{

return EnumUtil.getByCode(payStatus, PayStatusEnum.class);

}

}

然后在模板渲染中可这样:

${orderDTO.getOrderStatusEnum().message}

${orderDTO.orderId}

${orderDTO.buyerName}

${orderDTO.buyerPhone}

${orderDTO.buyerAddr}

${orderDTO.buyerAmount}

${orderDTO.getOrderStatusEnum().message}

${orderDTO.getPayStatusEnum().message}

${orderDTO.createTimestamp}

#list>

/**订单*/@Data//get/set//将值是null的数据剔除@JsonInclude(JsonInclude.Include.NON_NULL)

public classOrderDTO {

privateString orderId;/**买家名字**/privateString buyerName;/**买家手机**/privateString buyerPhone;/**买家地址**/privateString buyerAddr;/**用户openid**/privateString buyerOpenid;/**订单金额**/privateBigDecimal buyerAmount;/**订单状态,默认状态0新订单**/privateInteger orderStatus;/**支付状态,默认状态0等待支付**/privateInteger payStatus;privateDate createTimestamp;privateDate updateTimestamp;List orderDetailList;/***当orderDTO转成json格式时,是多出getOrderStatusEnum字段,*此注解表示屏蔽此字段的输出**/@JsonIgnorepublicOrderStatusEnum getOrderStatusEnum()

{

returnEnumUtil.getByCode(orderStatus,OrderStatusEnum.class);}

/***当orderDTO转成json格式时,是多出getOrderStatusEnum字段,*此注解表示屏蔽此字段的输出**/@JsonIgnorepublicPayStatusEnum getPayStatusEnum()

{

returnEnumUtil.getByCode(payStatus,PayStatusEnum.class);}

}

src/main/java └── com.teacher ├── config │ ├── AiConfig.java │ ├── SecurityConfig.java │ ├── WebConfig.java + │ ├── MilvusConfig.java // 向量数据库配置 + │ └── AsyncConfig.java // 异步处理配置 ├── controller │ ├── AiController.java │ ├── ContentController.java │ ├── CourseController.java │ ├── ExerciseController.java │ ├── AnalysisController.java + │ └── KnowledgeController.java // 知识库管理接口 ├── service │ ├── impl │ │ ├── AiServiceImpl.java │ │ ├── ContentServiceImpl.java │ │ ├── AnalysisServiceImpl.java + │ │ ├── KnowledgeServiceImpl.java // 知识库处理服务 + │ │ └── AssessmentServiceImpl.java // 考核生成服务 │ ├── AiService.java │ ├── ContentService.java │ ├── AnalysisService.java + │ ├── KnowledgeService.java // 知识库服务接口 + │ └── AssessmentService.java // 考核服务接口 ├── repository │ ├── CoursewareRepository.java │ ├── ExerciseRepository.java │ ├── UserRepository.java + │ ├── KnowledgeRepo.java // 知识库文档存储 + │ └── AnswerRepo.java // 学生答题存储 ├── model │ ├── entity │ │ ├── Courseware.java │ │ ├── Exercise.java │ │ ├── User.java + │ │ ├── KnowledgeDoc.java // 知识库文档实体 + │ │ ├── StudentAnswer.java // 学生答题实体 + │ │ └── KnowledgePoint.java // 知识点实体 │ ├── dto │ ├── AiRequest.java │ ├── AnalysisResult.java + │ ├── TeachingPlanDto.java // 教学计划DTO + │ └── ExerciseGenReq.java // 习题生成请求DTO │ ├── util │ ├── AiPromptBuilder.java │ ├── FileUtils.java │ ├── KnowledgeExtractor.java + │ ├── VectorUtils.java // 向量计算工具 + │ ├── DocumentParser.java // 文档解析工具 + │ └── QwenClient.java // 通义API客户端 + ├── task + │ └── KnowledgeIndexTask.java // 知识库索引异步任务 └── TeacherAssistantApplication.java 请你根据我的项目结构,给出dto中AiRequest、AnalysisResult、TeachingPlanDto、ExerciseGenReq的代码文件,有必要的话要加上调试日志
07-11
package com.canpoint.mall.dto.supply.struct; import com.canpoint.mall.common.enums.SupplyType; import com.canpoint.mall.dto.supply.dto.SupplyInsertDTO; import com.canpoint.mall.dto.supply.dto.SupplyUpdateDTO; import com.canpoint.mall.dto.supply.entity.SupplyEntity; import com.canpoint.mall.dto.supply.vo.SupplyExportVO; import com.canpoint.mall.dto.supply.vo.SupplyInfoVO; import org.mapstruct.*; /** * * @author libixin * @date 2025/11/25 15:09 */ @Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE, nullValueIterableMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT) public interface SupplyStruct { /** * 插入实体转换 * * @param dto * @return SupplyEntity */ SupplyEntity toEntity(SupplyInsertDTO dto); /** * 更新实体转换 * * @param dto * @return SupplyEntity */ SupplyEntity toEntity(SupplyUpdateDTO dto); /** * 详情转换 * * @param entity * @return SupplyInfoVO */ SupplyInfoVO toInfoVO(SupplyEntity entity); /** * 导出转换 * * @param entity * @return SupplyExportVO */ SupplyExportVO toExportVO(SupplyEntity entity); @AfterMapping default void afterToExportVO(@MappingTarget SupplyExportVO supplyExportVO, SupplyEntity supplyEntity) { // 处理状态字段转换 if (supplyEntity.getStatus() != null) { // 保持原始,让Excel自行处理显示转换 switch(supplyEntity.getStatus()) { case 1: supplyExportVO.setStatus("启用"); break; case 0: supplyExportVO.setStatus("禁用"); break; default: supplyExportVO.setStatus(""); break; } } // 处理供应商型字段转换 switch (supplyEntity.getSupplyType()){ case SupplyType.platform_supply.getCode(): supplyExportVO.setSupplyType("平台供应商"); break; case 2: supplyExportVO.setSupplyType("聚水潭"); break; case 3: supplyExportVO.setSupplyType("旺店通"); break; default: supplyExportVO.setSupplyType(""); break; } } } 这是个接口怎么改,确保性能
最新发布
12-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值