概述
通过ORM框架从数据库中查询出的实体对象,大部分情况下可能与前端页面展示的数据结果类型略有不同,比如:后端定义的店铺实体类(Shop)中有店铺状态:0-正常,1-未审核,2-违规,3-倒闭,在做脱敏的处理下需要转换成一个VO,其中店铺状态需要后台转换,因此可以通过自定义注解+反射的方式处理。
准备工作:
1、自定义注解
1.1 ConvertEnumField.java
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ConvertEnumField {
/** 枚举类.class */
Class<?> enumClass();
/** 实体类的字段名 */
String sourceFieldName() default "";
}
1.2 ConvertDateField.java
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ConvertDateField {
/** 实体类的字段名 */
String sourceFieldName() default "";
/**
* 日期的格式,例如:
*
* yyyy-MM-dd
*
* yyyy-MM-dd HH:mm:ss
*
* @return
*/
String pattern() default "";
}
2、枚举:ShopStatusEnum.java
public enum ShopStatusEnum {
/** 铺状态:0-正常,1-未审核,2-违规,3-倒闭 */
NORMAL(0, "正常"),
UNAUDITED(1, "未审核"),
GET_OUT_OF_LINE(2, "违规"),
CLOSE_DOWN(3, "倒闭");
/** 状态码 **/
private Integer code ;
/** 消息 **/
private String message ;
ShopStatusEnum(Integer code, String message) {
this.code = code ;
this.message = message ;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}