首页 > 其他分享 >关于对象转换赋值的骚操作

关于对象转换赋值的骚操作

时间:2022-10-10 15:22:26浏览次数:47  
标签:转换 String 对象 ApiModelProperty 商品 为空 import message 赋值

场景,前端提交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

相关文章

  • 扁平化数据的树形化(转换包含三级目录)
    在用vue+elementUI做管理系统时会使用到UI组件库中的Tree组件,就需要将获取到的扁平的数据转换成树形数据才好使用组件库中的Tree,这个函数可以转成三级Tree,函数如下//扁......
  • python重拾第七天-面向对象进阶
    本节内容:面向对象高级语法部分经典类vs新式类静态方法、类方法、属性方法类的特殊方法反射异常处理Socket开发基础作业:开发一个支持多用户在线的FTP程序......
  • 优先级排序为:算术运算符 > 关系运算符 > 赋值运算。
    优先级排序为:算术运算符>关系运算符>赋值运算。算术运算符中,-负数(如–1)、%百分比、^乘方、*和/(乘和除)、+和–(加和减)属于优先级第三级,加法运算符【+】、减法......
  • js、jquery 实时监听input中的值,并赋值到另一个input
    <inputtype="text"name="name"id="searchName"><inputtype="text"name="name_two"id="daochuName"><inputtype="text"name="txt_JEDX"id="txt_JEDX"......
  • 22、面向对象(反射)
    22.1、反射介绍:1、什么是反射:(1)反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机......
  • 23、面向对象(包装)
    23.1、包装介绍:1、什么是包装(继承+派生):python为大家提供了标准数据类型以及丰富的内置方法,其实在很多场景下我们都需要基于标准数据类型来定制我们自己的数据类型,新增/改......
  • 24、面向对象(内置方法)
    24.1、isinstance(obj,cls)和issubclass(sub,super):1、isinstance(obj,cls):#isinstance(obj,cls)检查对象obj是否是类cls的对象classFoo(object):#object是类默认继承......
  • SpringBoot+MyBatis Plus对Map中Date格式转换的处理
    在SpringBoot项目中,如何统一JSON格式化中的日期格式问题现在的关系型数据库例如PostgreSQL/MySQL,都已经对JSON类型提供相当丰富的功能,项目中对于不需要检索......
  • 关于对JS-面向对象-的理解
    最近看了《你不知道的JS上卷》这本书,写下自己的一点感悟!类首先,关于类,这是一种设计模式。JS是一门真正面对对象的语言为什么这样说呢?像JAVA这种众所周知的面对对象的语......
  • 时间戳转换成日期格式,格式日期转换成时间戳 js
    格式化时间戳1timestampToTime(timestamp){2constdt=newDate(timestamp*1000)3consty=dt.getFullYear()4......