RPC使用说明
从4.0版本开始,框架开始支持rpc调用,api层以及provider层均需要引入interface包,因此开发者可以在interface层pom中引入json-script-rule,引入后可以在interface层定义一个方法,代码如下
public interface IJSRuleStartService {
JSResult start(String body, JSRuleGlobalArgs args) throws BusinessException, JSRuleException;
}
BusinessException为开发者项目中自定义的异常,以dubbo为例provider层代码如下
@DubboService
public class JSRuleStartService implements IJSRuleStartService {
@Autowired
protected JSRuleService service;
@Override
public TestJSResult start(String body, JSRuleGlobalArgs args) throws BusinessException,JSRuleException{
return service.start(body,args);
}
}
TestJSResult为JSResult的子类,是自定义result模型,JSRuleService是框架内置的启动类,这里只需要调用start方法即可,api层代码如下
@RestController
public class ApiTestController {
@DubboReference(timeout = 10000)
private IJSRuleStartService startService;
@PostMapping("/start")
public JSResult start(@RequestBody JSBody<?> body){
return startService.start(ZSRule.modelToJson(body),null);
}
@PostMapping("/start2")
public Object start2(){
return startService.start("{\n" +
" \"params\":{\"roles\":[\"skk\"]},\n" +
" \"actions\":[{\n" +
" \"name\":\"asddsa\",\n" +
" \"get\":{\n" +
" \"relation\":{\n" +
" \"classes\":[\"TestBank\"]\n" +
" },\n" +
" \"fields\":[\"id\"]\n" +
" }\n" +
" }]\n" +
"}",null);
}
}
startService中的参数为String类型,因此/start中JSBody<?> body对象需要通过ZSRule.modelToJson方法将其转化为String才能进行调用。此外/start2中也展示了,这里还可以直接写一个json字符串来发送请求