Динамические параметры реконструируют - PullRequest
0 голосов
/ 04 сентября 2018

Я хочу использовать spring mvc controller, чтобы получить пользовательскую команду ввода и аргументы, а затем вызвать метод sendCommand.

Вызывать URL как:

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

Контроллер примет приведенную ниже команду в виде строки.

набор 1 б 2 с 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, одна конструкция shold, массив byte [] [] содержит данные, которые вы хотите передать методу sendCommand.

Но проблема в том, что массив byte [] [] сложно построить.

У кого-нибудь есть хорошие идеи для создания этого байтового массива [] []?

1 Ответ

0 голосов
/ 05 сентября 2018

решено в соответствии с кодом ниже.

 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...