如何将Java(哈希)映射上载到ApacheISIS RestFUL服务

如何将Java(哈希)映射上载到ApacheISIS RestFUL服务,java,json,rest,hashmap,isis,Java,Json,Rest,Hashmap,Isis,可以将地图上传到ApacheISIS的restful接口吗? 我想上传到以下界面: public SendMessageResponse send( @ParameterLayout(named = "dummyParam1") @Parameter(optionality = Optionality.MANDATORY) String dummyParam1, @ParameterLayout(named = "dummyParam2") @Parameter

可以将地图上传到ApacheISIS的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)
{ ... }
但是当我想上传这个JSON时,除了Map之外,所有参数都很好。我得到一个422不可处理实体状态和以下错误:应为链接,因为此对象的类型不是值,但未找到“href”

我试图弄清楚在ApacheISIS中如何在JSON中构建映射。我试图从ApacheISIS响应中获取一个映射,但我得到的唯一结果是它被禁用了,因为disabledReason:不可克隆的视图模型是只读的

所以我现在的问题是:是否可以使用JSON表示将JavaMap上传到ApacheISIS,还是不可能? 当不可能这样做时,有没有其他好的解决方案来分别上传地图部分或类似的东西


干杯,谢谢你的回答

简短的回答是否定的,RO viewer不支持这一点,主要是因为目前至少动作参数只能是标量,不能是列表或地图

你有两个选择

第一种方法是将映射序列化为json字符串,然后将参数定义为字符串。显然,在操作中,您需要对其进行反序列化

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

嗯,

[1]
[2]

我指的是额外的JAX-RS资源。如上文[1]所示,通用RestfulObjectsApplication由6个资源类组成,例如DomainObjectResourceServerSide。因此,您可以创建与这些类似的资源,并将它们注册到RestfulObjectsApplication的子类中。在内部实现方面,您可以使用headless API代码,请参见[3]OK。我使用了第一种意见。我将我的映射序列化为一个json字符串并发送出去,在另一端,我再次对它进行反序列化。感谢您的回答。仅供参考,在即将发布的Apache Isis 1.14.0中,元模型已得到增强,以支持接受参数集合的操作。这在Wicket viewer中公开,但RO viewer尚不支持。但是构建块现在已经存在,以支持这个用例。
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);