Get an integer or a list of integers with the same parameter
I have a problem. I am writing a soothing API. You can add / remove items to / from the group. To do this, I have to send a POST request to a specific url. The request is shown below. It already works. But I have a demand that makes me desperate. It should be possible to send an integer OR a list of integers in a JSON request. But the parameter names must be the same.
{
"add": "10",
"remove": "100"
}
But this request should be possible.
{
"add": [
10,
11,
12,
13
],
"remove": "100"
}
I tried to solve my problem with different settings as shown below.
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;
}
But I always get the following exception:
Throws: java.lang.IllegalArgumentException: conflicting setter definitions for property "add": net.erouting.type.GroupDiff # setAdd (1 params) vs net.erouting.type.GroupDiff # setAdd (1 params)
My question is: How can I solve my problem that both an integer and a list of integers are possible by running a JSON request to my server.
We are using Spring and Hibernate.
I hope you can help me.
source to share
I'm not very good at JSON, but you can try this:
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);
}
}
Output:
addList=[10]; removeList=[100]
addList=[10, 11, 12, 13]; removeList=[100]
addList=[10, 11, 12, 13]; removeList=[100]
source to share