【问题标题】:Receive an integer or a list of integers with the same parameter接收具有相同参数的整数或整数列表
【发布时间】:2013-01-06 14:06:51
【问题描述】:

我有问题。我正在编写一个宁静的 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;
}

但我总是收到以下异常:

原因:java.lang.IllegalArgumentException:属性“add”的设置器定义冲突:net.erouting.type.GroupDiff#setAdd(1 params) vs net.erouting.type.GroupDiff#setAdd(1 params)

我的问题是: 我怎样才能解决我的问题,通过向我的服务器发出 JSON 请求,整数和整数列表都是可能的。

我们正在使用 Spring 和 Hibernate。

我希望你能帮助我。

【问题讨论】:

  • 您是否尝试传递整数数组而不是 List&lt;Integer&gt;?我的意思是使用 addremove 不是 List&lt;Integer&gt; 而是 Integer[] addInteger[] remove 并且将在您的 setter 和 getter 中进行相同的更改
  • 资源应该可以在没有运算符重载的情况下以任何一种方式访问​​。
  • 如果你删除add(int) 的setter,Spring 不会尝试将"add": "10" 的单个值转换为一个项目的List 并将其提供给另一个setter (列表)?
  • @emka86 所以我尝试了你的想法。但这对我没有帮助。我只能接收数组。当我发送一个整数时,我收到此错误消息:org.codehaus.jackson.map.JsonMappingException:无法在 [Source: org.apache.catalina.connector. CoyoteInputStream@1b44f637; line: 2, column: 4] (通过引用链: net.erouting.type.GroupDiff["add"])
  • @ring0 不,它不起作用。我收到此错误消息:org.codehaus.jackson.map.JsonMappingException: Can not deserialize an instance of java.util.ArrayList out of VALUE_NUMBER_INT token at [Source: org.apache.catalina.connector.CoyoteInputStream@602b8db7; line: 2, column: 5] (通过引用链: net.erouting.type.GroupDiff["add"])

标签: java json spring hibernate javabeans


【解决方案1】:

我不擅长 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]

【讨论】:

  • 谢谢。我试过了,但它不起作用。我打算使用emka86提出的方案。
猜你喜欢
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多