在Drools的使用过程中,经常会有朋友问到,如何获得返回的结果。通常情况下,我们是通过传入的Fact对象来携带规则中处理之后的结果的。

通常我们会定义个用于返回编码和错误信息的父类Result:

@Data
public class Result {

	/**
	 * 操作编码
	 */
	private String code;

	/**
	 * 描述信息
	 */
	private String desc;

}

然后对应的Fact对象继承自该父类:

@EqualsAndHashCode(callSuper = true)
@Data
public class User extends Result{

	private String username;

	private BigDecimal amount;
}

这样,在规则中的RHS中便可以将结果设置到code和desc字段中:

package com.choupangxia.calculate;

import com.choupangxia.entity.User;

rule "test-result"

when
    $u : User();
then
    $u.setCode("success");
    $u.setDesc("校验成功");
end

由于Drools工作内存中的Fact对象(上面的User)和业务调用时传递的User是同一个对象,双面都持有该对象的引用,那么在API调用出的User对象中便可直接获得Drools规则引擎中对User对象的修改。

业务根据User对象中的code和desc进行判断,然后进行后续业务逻辑的处理。



drools如何获取处理(执行)结果?插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://choupangxia.com/2021/03/27/drools-result/