Angular Observable продолжает отображать массив вместо строки

Проект представляет собой беспорядок, поэтому я постараюсь быть максимально простым, но для контекста я использую angular, Spring и Maven. Однако я совершенно уверен, что единственная важная часть — это угловая.

Я пытаюсь выполнить вызов для отображения информации из пакета ресурсов, и он отлично работает с несколькими отпечатками консоли, показывающими, что строка не повреждена, но при загрузке она по-прежнему отображается как массив на странице (например: отображается как S,t, r,i,n,g вместо строки)

вот MessageController в Java (многопоточность является частью задания, я не считаю, что это актуально, но включил его для контекста):

public class MessageController {
    static ExecutorService messageExecutor = newFixedThreadPool(2);
    public static String myMessage = "";
    public static String myMessage1 = "";
    @RequestMapping(path = "/welcome")
    public String welcome(){
        Properties properties=new Properties();
        messageExecutor.execute(()->{
            try{
                InputStream stream = new ClassPathResource("welcome_en.properties").getInputStream();
                properties.load(stream);
                System.out.println(properties.getProperty("welcome"));
                myMessage = properties.getProperty("welcome");
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
        messageExecutor.execute(()->{
            try{
                InputStream stream = new ClassPathResource("welcome_fr.properties").getInputStream();
                properties.load(stream);
                System.out.println(properties.getProperty("welcome"));
                myMessage1 = properties.getProperty("welcome");
            } catch (Exception e) {
                e.printStackTrace();
            }
        });

        String arrayMessage = myMessage+ ", " +myMessage1;
        System.out.println(arrayMessage);
        return arrayMessage;
    }
}

На этом этапе все правильно выводится на консоль, все выглядит нормально.

далее в app.comComponent.ts у нас есть:

ngOnInit(){
      this.getWelcome().subscribe(
        welcome=>{
          this.welcome= <any>Object.values(welcome);
        }}

и getWelcome():

getWelcome(): Observable<any>{
      return this.httpClient.get(this.baseURL + '/welcome', {responseType: "text"});
    }

это просто установлено с помощью:

welcome!:string;

и вызывается в html как:

{{welcome}}

используя это, на веб-странице отображается: W,e,l,c,o,m,e,,, ,B,i,e,n,v,e,n,u,e

хотя http://localhost:8080/welcome правильно отображает: Добро пожаловать, Бьенвеню

как сделать так, чтобы это сообщение отображалось правильно?

Почему вы используете Object.values? Если это вызывается для строки, вы получите символы в виде массива.

Carcigenicate 06.05.2024 02:48

Что мне следует использовать? Object.values ​​— это то, что инструктор использовал в примере кода.

Johnny Rinaldo 06.05.2024 02:51

Я не знаю, потому что вы не показали, как используется this.welcome и каким он должен быть. Я могу догадаться, что вместо этого вы хотите JSON.parse, но я не уверен.

Carcigenicate 06.05.2024 02:54

Я думаю, это будет просто «добро пожаловать!:string;». это то, что ты искал? Я хочу убедиться, что добавляю в вопрос правильную информацию.

Johnny Rinaldo 06.05.2024 02:59

Я обновил вопрос в надежде, что он добавит то, что вы ищете.

Johnny Rinaldo 06.05.2024 03:00

Вы пробовали this.welcome = welcome; без Object.values()?

Yong Shun 06.05.2024 03:27
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не знаю, почему вы пытаетесь сделать:

this.welcome= <any>Object.values(welcome);

Ты можешь попробовать:

ngOnInit(){
      this.getWelcome().subscribe(
        welcome=> {
          this.welcome = welcome;
        }}

И вы можете добавить трубку, например:

// unsubcribeVar is a subject variable in class and do unsubcribe when component destroyed
this.getWelcome().pipe(takeUtil(this.unsubcribeVar)).subcribe((welcome)=>{
    this.welcome = welcome;
});
Ответ принят как подходящий

Когда вы подписываетесь на getWelcome() Observable и приводите его к object.values, вы рассматриваете его как объект, что приводит к разбиению строки на массив символов.

измените функцию getWelcome(), чтобы анализировать ответ как обычный текст вместо того, чтобы пытаться анализировать его как JSON

Вот как вы можете это сделать:

ngOnInit() {
  this.getWelcome().subscribe(
    welcome => {
      this.welcome = welcome;
    }
  );
}

getWelcome(): Observable<string> {
  return this.httpClient.get(this.baseURL + '/welcome', { responseType: "text" });
}

свойство welcome будет содержать текстовый ответ от сервера и должно корректно отображаться в вашем HTML-шаблоне.

Это работает! Спасибо! Я вообще не знаю, почему в примере кода это было вообще. Во-вторых, вы случайно не знаете, почему это сообщение не загружается при самой первой загрузке страницы? он загружает текст только после обновления.

Johnny Rinaldo 06.05.2024 07:38

Проверьте, есть ли какие-либо задержки в серверной части

Jagadeesh 06.05.2024 10:01

Я полагаю, что многопоточная часть приводит к небольшой задержке? Как мне это объяснить?

Johnny Rinaldo 06.05.2024 23:50

Вы возвращаете arrayMessage синхронно, что означает, что ответ будет отправлен до загрузки обоих файлов свойств.

Jagadeesh 07.05.2024 08:22

Другие вопросы по теме