我有一个字符串ID和点的地图,我需要从中生成类似于此的路径:
.../?assessment[id_1][points]=3&assessment[id_2][points]=5
我不确定如何在改造中做这样的事情。 我尝试手动生成字符串并将其附加到请求的末尾
@PUT("/path/to/api/{assessment}?{}")
void postScore(@Path("assessment") String rubricAssessment, Callback<Submission> callback);
哪个非常hacky并导致错误。
java.lang.IllegalArgumentException: Inteface.postScore: URL query string "{assessment}" must not have replace block.
有人建议在改造中采用更好的方法来实现这一目标吗?
感谢您阅读我的问题。
编辑:
我发现一种可能的解决方案是使用QueryMap或FieldMap,但仍需要我创建一个辅助方法来手动构建每个键值。像这样:
private static String getFieldMap(Map<String,String> map){
Map<String, String> fieldMap = new HashMap<String, String>();
for (Map.Entry<String, String> entry : map.entrySet())) {
map.put("assessment[" +entry.getCriterionId() +"][points]", String.valueOf(entry.getPoints()));
}
return fieldMap;
}
然后将地图传递给这样的东西?
@put("/things")
void things(@FieldMap Map<String, String> fields);
}
这是最好的方法吗?任何反馈都表示赞赏。
答案 0 :(得分:3)
你是对的。你确实可以使用QueryMap
。说实话,从来没有尝试使用FieldMap
,因为QueryMap
对我来说非常好。
如果你想使用queryMap,这很简单。例如:
Map testMap = new HashMap<String,String>();
testMap.put("key1", "value1");
testMap.put("key2", "value2");
并将其传递给您postScore call。
something.postScore("yourStringValue",testMap);
您的改装电话应如下所示:
void postScore(@Path("assessment") String rubricAssessment, @QueryMap Map<String,String> callback)
希望这有帮助。