2013-01-23 35 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