动态参数重构

时间:2018-09-04 11:26:00

标签: java parameters

我想使用spring mvc控制器获取用户输入命令和参数,然后调用sendCommand方法。

调用网址,如:

http://127.0.0.1:8090/offheap/cmd?command=set a 1 b 2 c 3

控制器将接受以下命令作为字符串。

  

设置a 1 b 2 c 3

然后它将调用sendCommand方法将键a设置为值1;键b,值2;键c,值3进入本地缓存。

下面的控制器代码:

@ResponseBody
@RequestMapping(value = "/offheap/cmd")
public String userInput(@RequestParam String command) {

    String[] commandArray = command.split(" ");
    String cmd = StringUtils.upperCase(commandArray[0]);

    Object result;

    if (commandArray.length > 1) {
        //TODO, how to construct the args??
        byte[][] args = null;
        result = ohcCacheStrategy.sendCommand(OffheapCacheCommand.valueOf(cmd), args);
    } else {
        result = ohcCacheStrategy.sendCommand(OffheapCacheCommand.valueOf(cmd));
    }
    return JSON.toJSONString(result);
}

下面的SendCommand方法代码:

public Object sendCommand(OffheapCacheCommand command, byte[]... args) {
    //logic here, will ignore.
}

我知道要使用byte [] ... args,一个应该构造一个byte [] []数组,其中包含要传递给sendCommand方法的数据。

但是问题是byte [] []数组很难构造。

有人会构造这个byte [] []数组吗?

1 个答案:

答案 0 :(得分:0)

根据下面的代码解决了它。

 public String sendCommand(@RequestParam String command, @RequestParam String args) {

    String cmd = StringUtils.upperCase(command);
    String[] argsArray = args.split(" ");
    Object result;

    if (argsArray.length > 0) {
        byte[][] byteArray = new byte[argsArray.length][];
        for (int i = 0; i < argsArray.length; i++) {
            byte[] element = SerializationUtils.serialize(argsArray[i]);
            byteArray[i] = element;
        }

        result = ohcCacheStrategy.sendCommand(OffheapCacheCommand.valueOf(cmd), byteArray);
    } else {
        result = ohcCacheStrategy.sendCommand(OffheapCacheCommand.valueOf(cmd));
    }
    return JSON.toJSONString(result);
}