如何将 Java (Hash)Map 上传到 Apache ISIS RestFUL 服务

How to upload a Java (Hash)Map to Apache ISIS RestFUL service

是否可以将地图上传到 Apache ISIS 的 restful 界面? 我有以下界面,我想上传到:

public SendMessageResponse send(
        @ParameterLayout(named = "dummyParam1") @Parameter(optionality = Optionality.MANDATORY) String dummyParam1, 
        @ParameterLayout(named = "dummyParam2") @Parameter(optionality = Optionality.MANDATORY) String dummyParam2, 
        @ParameterLayout(named = "dummyMap1") @Parameter(optionality = Optionality.OPTIONAL) Map<String, String> dummyMap1)
{ ... }

dummyMap1是我要上传的参数。在 Java 中,这是我尝试将 JavaMap 转换为 JSON String:

Map<String, String> dummyMap1Up = new HashMap<String, String>();
dummyMap1Up.put("Test123", "123");
dummyMap1Up.put("Test456", "456");

JSONObject json = new JSONObject();
json.put("dummyParam1", "someString");
json.put("dummyParam2", "someOtherString");
json.put("dummyMap1", dummyMap1Up);

但是当我想上传这个 JSON 所有参数都很好,除了地图。我得到 422 Unprocessable Entity 状态和以下错误:Expected a link (because this object's type is not a value) but found no 'href'".

我试图弄清楚如何在 Apache ISIS 的 JSON 中构建地图。我试图从 Apache ISIS 响应中获取地图,但我唯一得到的是它被禁用的通知,因为 "disabledReason" : "Non-cloneable view models are read-only".

所以我现在的问题是:是否可以使用 JSON 表示将 Java 地图上传到 Apache ISIS,还是不可能? 做不到的时候,有没有其他好的解决办法,单独上传地图部分之类的?

干杯,感谢您的回答!

简短的回答是 "no",RO 查看器不支持这个,主要是因为(目前至少)动作参数只能是标量,不能是列表或映射。

你有几个选择。

首先是将您的地图序列化为 json 字符串,然后将参数定义为字符串。显然,您需要在操作中反序列化它。

或者,您始终可以在 RO 查看器提供的端点之外定义其他自定义端点。为此,您需要子类化 RestfulObjectsApplication [1] 以添加额外的端点,然后在 web.xml [2]

中注册

HTH,

[1] https://github.com/apache/isis/blob/master/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/RestfulObjectsApplication.java#L36 [2] https://github.com/apache/isis/blob/master/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/web.xml#L272