2013-01-23 97 views
3

我遇到問題。我正在寫一個寧靜的API。可以在組中添加/刪除項目。爲此,我必須將POST請求發送到特定的URL。請求如下所示。這已經工作了。但我有一個要求讓我絕望。應該可以在JSON請求中發送整數或整數列表。但參數名稱應該是相同的。接收整數或具有相同參數的整數列表

{ 
"add": "10", 
"remove": "100" 
} 

但是這個要求應該是可以的。

{ 
"add": [ 
10, 
11, 
12, 
13 
], 
"remove": "100" 
} 

我試過了,解決我的問題有不同的setter方法如下圖所示。

public class GroupDiff { 
// TODO 
private List<Integer> add = new ArrayList<Integer>(); 
private List<Integer> remove = new ArrayList<Integer>(); 

public List<Integer> getAdd() { 
    return add; 
} 
public void setAdd(List<Integer> add) { 
    this.add = add; 
} 
public void setAdd(int add) { 
    List<Integer> list = new ArrayList<Integer>(); 
    list.add(add); 
    this.add = list; 
} 
public List<Integer> getRemove() { 
    return remove; 
} 
public void setRemove(List<Integer> remove) { 
    this.remove = remove; 
} 

public void setRemove(int remove) { 
    List<Integer> list = new ArrayList<Integer>(); 
    list.add(remove); 
    this.remove = list; 
} 

但我總是收到以下異常:java.lang.IllegalArgumentException異常:二傳手有衝突定義爲屬性的 「添加」:

所致net.erouting.type.GroupDiff#setAdd(1 PARAMS)VS net.erouting.type.GroupDiff#setAdd(1個PARAMS)

我的問題是: 我怎樣才能解決我的問題,有可能這兩個整數,發射了JSON整數列表請求我的服務器。

我們使用Spring和Hibernate。

我希望你能幫助我。

+1

你嘗試通過整型數組而不是List ''的?我的意思是使用'add'和'remove'而不是'List ',而是'Integer [] add'和'Integer [] remove',並且在你的setters和getters中會做出同樣的改變。 – emka86

+0

資源應該可以被訪問沒有運營商超載的方式。 – korefn

+0

如果您刪除了'add(int)'的setter,那麼Spring將不會嘗試將單個值轉換爲List中的一個項目並將其提供給另一個setter(List)? –

回答

0

我不擅長JSON,但你可以試試這個:

import java.util.ArrayList; 
import java.util.List; 

public class GroupDiff { 
    private List<Integer> addList = new ArrayList<Integer>(); 
    private List<Integer> removeList = new ArrayList<Integer>(); 

    public List<Integer> getAddList() { 
     return addList; 
    } 

    public List<Integer> getRemoveList() { 
     return removeList; 
    } 

    public void setAddList(int... toAdd) { 
     for (int i = 0; i < toAdd.length; i++) { 
      this.addList.add(toAdd[i]); 
     } 
    } 

    public void setRemoveList(int... toRemove) { 
     for (int i = 0; i < toRemove.length; i++) { 
      this.removeList.add(toRemove[i]); 
     } 
    } 

    public static void main(String[] args) { 
     GroupDiff groupDiff; 

     /* 
     * All of this calls will work good. 
     */ 
     groupDiff = new GroupDiff(); 
     groupDiff.setAddList(10); 
     groupDiff.setRemoveList(100); 
     System.out.printf("addList=%s; removeList=%s\n", 
       groupDiff.addList, groupDiff.removeList); 

     groupDiff = new GroupDiff(); 
     groupDiff.setAddList(10, 11, 12, 13); 
     groupDiff.setRemoveList(100); 
     System.out.printf("addList=%s; removeList=%s\n", 
       groupDiff.addList, groupDiff.removeList); 

     groupDiff = new GroupDiff(); 
     groupDiff.setAddList(new int[]{10, 11, 12, 13}); 
     groupDiff.setRemoveList(100); 
     System.out.printf("addList=%s; removeList=%s\n", 
       groupDiff.addList, groupDiff.removeList); 
    } 
} 

輸出是:

addList=[10]; removeList=[100] 
addList=[10, 11, 12, 13]; removeList=[100] 
addList=[10, 11, 12, 13]; removeList=[100] 
+0

謝謝。我嘗試過,但不起作用。我將使用emka86提出的解決方案。 – EvilKarter