ruoyi请求中带有params参数,但是后端实体类无该属性,如何接收

 如上图,若依发送请求时带有了params参数,后端controller用TruePredict实体类来接收参数。

    @PreAuthorize("@ss.hasPermi('testmodule:truepredict:list')")
    @GetMapping("/list")
    public TableDataInfo list(TruePredict truePredict)
    {
        System.out.println(truePredict);
        startPage();
        List<TruePredict> list = truePredictService.selectTruePredictList(truePredict);
        return getDataTable(list);
    }

 但是对应的实体类仅有dataId,trueData,predictData。

public class TruePredict extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** 数据id */
    private Long dataId;
    /** 真实值 */
    @Excel(name = "真实值")
    private String trueData;
    /** 预测值 */
    @Excel(name = "预测值")
    private String predictData;
}

那么params去哪了呢?mapper层查询的时候势必要用到params参数,如下,可以看到用了params参数。

    <select id="selectTruePredictList" parameterType="TruePredict" resultMap="TruePredictResult">
        <include refid="selectTruePredictVo"/>
        <where>  
            <if test="trueData != null  and trueData != ''"> and true_data = #{trueData}</if>
            <if test="predictData != null  and predictData != ''"> and predict_data = #{predictData}</if>
            <if test="params.beginCreateTime != null and params.beginCreateTime != '' and params.endCreateTime != null and params.endCreateTime != ''"> and create_time between #{params.beginCreateTime} and #{params.endCreateTime}</if>
        </where>
    </select>

在controller层System.out.println(truePredict);得到如下结果,可见无params参数。

com.ddd.truepredict.domain.TruePredict@590ca3f3[
  dataId=<null>
  trueData=23
  predictData=28
  createTime=<null>
  updateTime=<null>
  createBy=<null>
  updateBy=<null>
]

这是由于,TruePredict继承自BaseEntity

public class TruePredict extends BaseEntity

而BaseEntity中有params参数:

public class BaseEntity implements Serializable
{
    private static final long serialVersionUID = 1L;

    ...省略多个属性

    /** 请求参数 */
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private Map<String, Object> params;
}

因此TruePredict实际上是能接受到params参数的,自然能在mapper层使用params参数。

但是为什么System.out.println(truePredict);无法得到params的输出呢?

这是因为System.out.println实际上调用的是toString方法,而TruePredict中的toString方法没有写params参数,自然打印不出来。

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("dataId", getDataId())
            .append("trueData", getTrueData())
            .append("predictData", getPredictData())
            .append("createTime", getCreateTime())
            .append("updateTime", getUpdateTime())
            .append("createBy", getCreateBy())
            .append("updateBy", getUpdateBy())
            .toString();
    }

在后面加上

.append("params", getParams())

再打印,就能看到params参数了。

注:gerParams方法是在BaseEntity中定义的

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值