• Какие параметры передать в format в JAVA?

    @Wan-Derer
    Darya Boo, Данные в метод могут поступать самые разные, поэтому тестировать надо -с разными вариантами данных.
  • Реализация метода в котором параметры это поля других классов!?

    @Wan-Derer
    Person - это целый человек, включающий имя и телефон. Поэтому не может быть Person fullName, Person numberOfTell, может быть только Person person и person.fullName и person.numberOfTell, точнее могло бы быть если бы Person не был абстрактным :)
  • Какие параметры передать в format в JAVA?

    @Wan-Derer
    Darya Boo, здесь было бы удобнее чтобы каждая строка текста была представлена отдельным String, а все вместе они составляли коллекцию List. Вместо добавления '\n' вносим набранную строку в List и заводим новую.
    Далее идём по строкам, смотрим их длину, понимаем сколько пробелов надо добавить. Смотрим какие методы есть у String касаемо поиска и замены подстрок (надо заменить "пробел" на "два_пробела" начиная с определённой позиции).
    Второе выравнивание можно сделать в отдельном цикле, а можно в том же, но тогда эту логику лучше вынести в отдельный метод: так ты сможешь протестировать его отдельно и сам код будет более читаем.
    Тут есть нюанс, но ты с ним разберёшься когда будешь тестировать :)
  • Почему не работает исключение JAVA?

    @Wan-Derer
    1. У тебя в этом коде не возникает ситуации когда прерывается нормальное исполнение программы (исключение), всё отрабатывает штатно.
    2. IndexOutOfBoundsException это название совершенно конкретного исключения, которое будет перехвачено (catch) только если возникнет именно оно, а не какое-то другое. В твоём коде даже нет объекта, на котором это исключение могло бы возникнуть.

    Замени в своём коде сложение делением и введи B == 0 и программа завершится с ошибкой, но catch не сработает потому что ты ловишь не то исключение. А какое надо ловить - см. в сообщениях программы.
  • Angular 14, почему теряются роуты при деплое?

    @Wan-Derer Автор вопроса
    dodo512, а root "c:/MySite"; правильно прописоно? Или надо было root "c:/MySite/";?
  • Angular 14, почему теряются роуты при деплое?

    @Wan-Derer Автор вопроса
    dodo512, Ох ты ж! NGINX будучи остановленным и выгруженным из процессов, как-то продолжал работать... Помогла перезагружка ОС. Венда преподносит сюрпризы :)
    А можно подробнее, что дала эта настройка? Дело в том что у меня есть бэкэнд (Java/Spring, сервер Netty) и мне надо мой фронт внедрить туда как статику. До появления роутов всё работало, а сейчас нет. Надо сделать аналогичную настройку, понять бы какую, хотя бы как это называется, куда копать.
  • Angular 14, почему теряются роуты при деплое?

    @Wan-Derer Автор вопроса
    dodo512, поменять одну строчку на другую? Не помогло
  • Как устранить ошибку CORS?

    @Wan-Derer
    Орхан Гасанлы, Кстати, может так получиться что этот конфиг не понадобится при выпуске готового приложения. Когда мы пилим фронт (у меня Ангуляр, но с Реактом, вроде так же), для запуска используется специальный сервер на ноде, то который отзывается на порт 4200. Когда же мы деплоим фронт, мы получаем обычный набор HTML/CSS/JS, который скармливаем WEB-серверу (Apache, NGINX ...) или внедряем в наш бэк в качестве static контент.
    Т.е. получается что запросы от фронта перестают быть "подозрительными" т.к. идут от обычного браузера.
    Это только моё предположение, я пока разбираюсь с деплоем, надо будет проверить так ли это.
  • Как это расшифровать?

    @Wan-Derer
    vitya_brodov, Ну, если ты и дальше будешь молчать что за сервер, что за тело, что куда отправляется и возвращается - тебе вряд ли помогут.
  • Как это расшифровать?

    @Wan-Derer
    В теле чего?
    Вообще, HTTP (вроде) запрещает использование не ASCII символов. Если тебе надо, например, в заголовке передать строку с кириллицей, ты должен преобразовать его в формат "с процентиками", не знаю как он правильно называется:
    String s = "Привет";
    String encoded = URLEncoder.encode(s, StandardCharsets.UTF_8);     //  получится %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82

    Тут есть нюанс: если в исходной строке есть пробелы, они заменятся на плюсы ('+'). Поэтому правильно писать так:
    String encoded = URLEncoder.encode(s, StandardCharsets.UTF_8).replace("+", "%20");

    При этом если в исходной строке были плюсы, они заменятся на "%2B", так что всё преобразуется корректно.
  • Как устранить ошибку CORS?

    @Wan-Derer
    Орхан Гасанлы, у меня тоже всё работало через Postman, и GET-запросы через браузер шли нормально. А вот через фронт-приложение (у меня Angular) возникала ошибка CORS. Этот конфиг помог с этим справиться.
  • Как создать таблицу в excel файле посредством Java-кода?

    @Wan-Derer
    Я использовал библиотеку Apache POI. Срочно, наверно, не получится, я разбирался пару дней. Могу тебе в личку прислать свой класс, он у тебя не соберётся т.к. есть зависимости от других частей проекта, но просто в виде образца, возможно, поможет.
  • Как скачивать файл в Spring WebFlux?

    @Wan-Derer Автор вопроса
    сергей кузьмин, можно попросить ссылочку на этот учебник?
  • Как скачивать файл в Spring WebFlux?

    @Wan-Derer Автор вопроса
    сергей кузьмин, По результатам обсуждения здесь я нашёл пример, в котором работа идёт не с файлом, а со стримом. Причём годится не только FileOutputStream а любой OutputStream, например, ByteArrayOutputStream. Т.е. файл создавать не надо, значит и удалять ничего не надо.
    Я максимально упростил пример и получился такой тест:
    @GetMapping("/dl")
    @ResponseBody
    public ResponseEntity<Mono<Resource>> download() throws IOException {
    
      String text = """
        aaa,
        bbb,
        яяя
        """;
    
      byte[] bytes = text.getBytes();
    
      ByteArrayOutputStream out = new ByteArrayOutputStream();
      out.write(bytes);
      out.close();
    
      ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
    
      Mono<ByteArrayInputStream> file = Mono.just(in);
    
      String filename = "1.txt";
      return ResponseEntity
        .ok()
        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + filename)
        .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE)
        .body(file
          .flatMap(x -> Mono.just(new InputStreamResource(x)))
        )
        ;
    }

    Это работает. Теперь занимаюсь переделкой своих классов, создающих "файлы" чтобы они отдавали нужные стримы.
  • Как скачивать файл в Spring WebFlux?

    @Wan-Derer Автор вопроса
    Сергей Горностаев, у меня 2 типа файлов: Excel (через библиотеку Apache POI) и PDF (через библиотеку https://github.com/LibrePDF/OpenPDF).
    В обоих случаях файлы небольшие по размеру, на входе моих методов JSON с содержимым, на выходе - файл.
    Для Excel я создаю XSSFWorkbook (класс библы), наполняю его содержимым, потом вызываю его метод write(), который принимает FileOutputStream и получаю файл.
    Для PDF есть некая внутренняя магия библы под названием PdfWriter, в который я сначала должен передать "заготовку" Document и FileOutputStream, потом наполнить документ данными, потом сделать document.close(); и получается файл.
  • Как скачивать файл в Spring WebFlux?

    @Wan-Derer Автор вопроса
    Сергей Горностаев, Это как? OutputStream отдавать на контроллер? Или как? Можно пример?
  • Как скачивать файл в Spring WebFlux?

    @Wan-Derer Автор вопроса
    сергей кузьмин, т.к. я впервые сталкиваюсь с такой задачей, то и поступил бы так же: поискал пример в интернетах :)
  • Как записывать звук с микрофона?

    @Wan-Derer
    Видимо, данный формат (PCM_SIGNED 16000.0 Hz, 8 bit, stereo, 2 bytes/frame) не поддерживается твоим звуковым интерфейсом. Посмотри какие ещё форматы есть в библиотеке и подбери такой, который поддерживается.
  • Как с generics получить объект нужного типа?

    @Wan-Derer Автор вопроса
    Dmitry Roo, Да, так работает, но опять же надо кастовать с предупреждением. Не люблю предупреждения :)
    Но это, по крайней мере, рабочий вариант.
  • Как с generics получить объект нужного типа?

    @Wan-Derer Автор вопроса
    Dmitry Roo, да, но считается что Reflection надо старательно избегать :)
    Попробовал соорудить такую фабрику:
    class MyFactory{
      private final String type;
    
      public MyFactory(String type) {
        this.type = type;
      }
    
      public <T extends A> T getObject(){
        return switch (type){
          case "B" -> new B();    // ОШИБКА: Bad type in switch expression: B cannot be converted to T
          case "C" -> new C();
          default -> throw new IllegalStateException("Unexpected value: " + type);
        };
      }
    
    }


    Но даёт ошибку. Можно написать так:
    public Object getObject(){...}
    но тогда на стороне получения надо кастовать Object в T и мы получаем Unchecked cast: 'java.lang.Object' to 'T'

    Вот здесь что-то похожее обсуждается, пытаюсь разобраться.