Передача 2D-массива из Spring boot в React

#javascript #java #arrays #reactjs #spring-boot

Вопрос:

Я пытаюсь отправить 2D-массив символов с моего контроллера Spring для реагирования … это работает, когда я использую Arraylist, но не работает с «char [] []».

так что это работает

 @GetMapping(value = "/test")
public ArrayList<String> getTest() {

    ArrayList<String> arr = new ArrayList<String>();
    arr.add("Something");
    arr.add("Somehow");
    return arr;
 

и это не работает

 @SuppressWarnings("checkstyle:WhitespaceAround")
@GetMapping(value = "/newboard")
public char[][] emptyBoard(char[][] playField) {

    for (char y = 0; y < playField.length; y  ) {

        for (char x = 0; x < playField[y].length; x  ) {

            playField[y][x] = (' ');

        }
    }
        return playField;
}
 

Комментарии:

1. хм, а как насчет использования List<List< Character >>

2. Я пытаюсь использовать лучший и более простой подход, потому что я не хочу менять все методы в своем коде… так как все они используют «Игровое поле как символ[][]» @AlbertoSinigaglia

Ответ №1:

После хорошего исследования я обнаружил, что отправка примитивного типа данных на интерфейс не работает… это ответ на этот вопрос, возможно, не во всех ситуациях, но, по крайней мере, в моем случае это было решением.

вы должны попробовать следующее:

Либо попробуйте использовать типы ссылок =>

 @GetMapping(value = "/test")
public ArrayList<String> getTest() {

ArrayList<String> arr = new ArrayList<String>();
arr.add("Something");
arr.add("Somehow");
return arr;
 

ИЛИ этот подход (от типа {Класс} ) =>

  @GetMapping(value = "/test")
 public MyModel getTest() {


    MyModel myModel = new MyModel();
    myModel.setFirstName("Somthing");
    myModel.setLastName("Somehow");

    GameUpdate u = new GameUpdate();
    Player p1 = new Player();
    p1.setName("1");
    u.setPlayer1(p1);
    return myModel;
}
 

Ответ №2:

Вы можете просто изменить тип возвращаемого значения и таким образом «отлить» возвращаемый объект:

 @SuppressWarnings("checkstyle:WhitespaceAround")
@GetMapping(value = "/newboard")
public List<List<Character>> emptyBoard(char[][] playField) {

    for (char y = 0; y < playField.length; y  ) {

        for (char x = 0; x < playField[y].length; x  ) {

            playField[y][x] = (' ');

        }
    }
    return Arrays.asList(playField)
                .stream()
                .map(Arrays::asList)
                .collect(Collectors.toList());
}
 

Комментарии:

1. Спасибо за ответ, но => «Список><Список<Символ><Символ>>» этот подход выглядит так же, как (Arraylist<Символ>><Arraylist<символ[]><символ[]>>)… ваше решение может быть полезным, но мне нужно изменить переменную (игровое поле) во всех методах, которые я использовал, и это вызовет много проблем в моем игровом алгоритме.

2. @BasharBoutros нет, вам не нужно ничего менять, вам нужно будет изменить только оператор return в классе контроллера, в котором вы возвращаете матрицу

3. я получил эту ошибку java: не удается найти символ символ: метод asList() расположение: класс java.util.stream. Коллекционеры

4. @BasharBoutros извините, просто опечатка, попробуйте сейчас