編輯:我不知道爲什麼我困擾創建一個域對象,並經歷編碼和解碼整個列表的麻煩。同樣,你可以簡單地Base64編碼每個參數,並在讀入時決定每個參數。
根據我上面的評論,我能夠實現一個解決方案。我對實施並不特別滿意,但它完成了工作。我想重申,幾乎可以肯定有更好的解決方案,可以採用更明確的方法來處理域對象以及值的編組和解組。
假設值的列表被格式化作爲價值JSON對象列表,例如:
[{"value":"test,1"},{"value": "test,2"}]
的base64編碼是:
W3sidmFsdWUiOiJ0ZXN0LDEifSx7InZhbHVlIjogInRlc3QsMiJ9XQ==
控制器是否是設置爲:
@RequestMapping(value = "/test", method = RequestMethod.GET)
@ResponseBody
public String test(@RequestParam(value = "values", required = true) String values) throws JsonParseException, JsonMappingException, IOException{
byte[] bValues = Base64.getDecoder().decode(values.getBytes());
String json = new String(bValues);
ObjectMapper mapper = new ObjectMapper();
List<Value> myObjects = mapper.readValue(json, new TypeReference<List<Value>>(){});
StringBuilder result = new StringBuilder();
int i = 1;
for (Value value : myObjects){
result.append("value ");
result.append(" ");
result.append(i++);
result.append(": ");
result.append(value.getValue());
result.append("<br>");
}
result.setLength(result.length() - 1);
return result.length() > 0 ? result.toString() : "Test";
}
public static void main(String[] args) {
SpringApplication.run(UatproxyApplication.class, args);
}
Value等級爲:
public class Value implements Serializable{
private static final long serialVersionUID = -7342446805363029057L;
private String value;
public Value(){
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
請求爲:
/test?values=W3sidmFsdWUiOiJ0ZXN0LDEifSx7InZhbHVlIjogInRlc3QsMiJ9XQ==
和響應是:
value 1: test,1
value 2: test,2
還沒有嘗試過,但我認爲下面應該工作。定義一個模擬請求對象的域對象(在這種情況下爲值)。創建這些對象的列表作爲JSON,Base64對其進行編碼併發送GET請求。在Spring一側,將請求參數的類類型更改爲域對象的列表。 – Andonaeus
@Andonaeus:這種方式是瘋狂。也就是說,自從我開始這個項目的這個特定部分以來,我一直在考慮它。 – DrGodCarl
非常相似,但也沒有解決:http://stackoverflow.com/q/33484711/2954288 – Harald