Java 接收具有相同参数的整数或整数列表

Java 接收具有相同参数的整数或整数列表,java,json,spring,hibernate,javabeans,Java,Json,Spring,Hibernate,Javabeans,我有个问题。我正在编写一个restful API。可以在组中添加/删除项目。为此,我必须向特定的URL发送POST请求。请求如下所示。这已经起作用了。但我有一个让我绝望的要求。应该可以在JSON请求中发送整数或整数列表。但是参数名应该是相同的 { "add": "10", "remove": "100" } 但是这个请求应该是可以实现的 { "add": [ 10, 11, 12, 13 ], "remove": "100" } 我试着用不同的二传手来解决我的问题,如下所示 publ

我有个问题。我正在编写一个restful API。可以在组中添加/删除项目。为此,我必须向特定的URL发送POST请求。请求如下所示。这已经起作用了。但我有一个让我绝望的要求。应该可以在JSON请求中发送整数或整数列表。但是参数名应该是相同的

{
"add": "10",
"remove": "100"
}
但是这个请求应该是可以实现的

{
"add": [
 10,
 11,
 12,
 13
],
"remove": "100"
}
我试着用不同的二传手来解决我的问题,如下所示

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;
}
公共类GroupDiff{
//待办事项
private List add=new ArrayList();
private List remove=new ArrayList();
公共列表getAdd(){
返回添加;
}
公共无效集合添加(列表添加){
this.add=添加;
}
公共void setAdd(int add){
列表=新的ArrayList();
列表。添加(添加);
this.add=列表;
}
公共列表getRemove(){
退换货;
}
公共void setRemove(列表移除){
这个。移除=移除;
}
公共void setRemove(int remove){
列表=新的ArrayList();
列表。添加(删除);
this.remove=列表;
}
但我总是收到以下例外情况:

原因:java.lang.IllegalArgumentException:属性“add”的setter定义冲突:net.erouting.type.GroupDiff#setAdd(1个参数)与net.erouting.type.GroupDiff#setAdd(1个参数)

我的问题是: 我如何解决我的问题,通过向我的服务器发送JSON请求,可以同时生成一个整数和一组整数

我们正在使用Spring和Hibernate


我希望你能帮助我。

我不擅长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);
    }
}

您是否尝试传递整数数组而不是
List
?我的意思是用作
add
remove
而不是
List
而是
integer[]add
integer[]删除
,您的setter和getters也将进行相同的更改。无论哪种方式都可以访问资源,而不需要运算符重载。如果您删除
add(int)
的setter,Spring是否会尝试将单个值转换为一个项的列表,并将其提供给另一个setter(列表)?@emka86所以我尝试了你的想法。但是这对我没有帮助。我只能接收数组。当我发送一个整数时,我会收到以下错误消息:org.codehaus.jackson.map.JsonMappingException:无法反序列化java.lang.integer[]的实例,超出值\u NUMBER\u INT标记[来源:org.apache.catalina.connector。CoyoteInputStream@1b44f637;行:2,列:4](通过引用链:net.erouting.type.GroupDiff[“add”])@ring0不,它不起作用。我收到以下错误消息:org.codehaus.jackson.map.JsonMappingException:无法反序列化java.util.ArrayList的实例,超出值\u NUMBER\u INT标记[来源:org.apache.catalina.connector。CoyoteInputStream@602b8db7;行:2,列:5](通过引用链:net.erouting.type.GroupDiff[“add”])谢谢。我试过了,但没用。我将使用emka86提出的解决方案。
addList=[10]; removeList=[100]
addList=[10, 11, 12, 13]; removeList=[100]
addList=[10, 11, 12, 13]; removeList=[100]