场景,前端提交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; } }
目前没有发现更好的解决方案.
标签:转换,String,对象,ApiModelProperty,商品,为空,import,message,赋值 From: https://www.cnblogs.com/xyzxy/p/16775855.html