场景,前端提交List<Object>,后端接收后要进行一系列数据验证,最后转成JSon存入mysql,
问题,Bo对象是List<Object> ,Entity 是String.
失败方案,
Bo属性
List<Objetct> attr;
entity属性;
String attr
// hutool工具
BeanUtil.toBean(Bo,Entity.class);
这样返回的 String attr是类似序列化的字符串,不符合需求
解决方案:
查看Hutool源码,发现Bo对象 implements ValueProvider 后可以对属性重写.
于是:
import cn.hutool.core.bean.copier.ValueProvider;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.web.car.goods.service.impl.GfGoodsServiceImpl;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.util.List;
/**
* 商品业务对象 gf_goods
*
* @author ruoyi
* @date 2022-10-09
*/
@Data
@ApiModel("商品业务对象")
public class GfGoodsAddBo implements ValueProvider {
/**
* 商品标题
*/
@ApiModelProperty("商品标题")
@NotEmpty(message = "商品标题不能为空")
private String goodsTitle;
/**
* 商品名称
*/
@ApiModelProperty("商品名称")
@NotEmpty(message = "商品名称不能为空")
private String goodsName;
/**
* 封面图
*/
@ApiModelProperty("封面图")
@NotEmpty(message = "封面图不能为空")
private String coverImg;
/**
* 轮播图
*/
@ApiModelProperty("轮播图")
@NotEmpty(message = "轮播图不能为空")
private String bannerImg;
/**
* 商品详情
*/
@ApiModelProperty("商品详情图")
@NotEmpty(message = "商品详情图不能为空")
private String goodsDetail;
/**
* 商品类型
*/
@ApiModelProperty("商品类目")
@NotNull(message = "商品商品类目不能为空")
private Integer goodsCategoryId;
@ApiModelProperty("商品规格列表组合")
@NotNull(message = "商品规格列表组合不能为空")
@Valid
List<GfGoodsRuleDetailAddBo> ruleGroups;
/**
* 规格详情{ [长:11,22,44].[宽11,22,33] }
*/
@ApiModelProperty("商品规格详情")
@NotNull(message = "商品规格详情不能为空")
@JsonFormat
@Valid
private List<GfRuleDetailBo> ruleDetail;
// 把特定对象转为json存储
@Override
public Object value(Object key, Type valueType) {
Field field = ReflectUtil.getField(this.getClass(), (String) key);
Object fieldValue = ReflectUtil.getFieldValue(this, field);
if (field!=null&&field.isAnnotationPresent(JsonFormat.class)){
return JSONUtil.toJsonStr(fieldValue);
}else{
return fieldValue;
}
}
@Override
public boolean containsKey(Object key) {
return true;
}
}
目前没有发现更好的解决方案.
浙公网安备 33010602011771号