Проект представляет собой беспорядок, поэтому я постараюсь быть максимально простым, но для контекста я использую 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 — это то, что инструктор использовал в примере кода.
Я не знаю, потому что вы не показали, как используется this.welcome и каким он должен быть. Я могу догадаться, что вместо этого вы хотите JSON.parse, но я не уверен.
Я думаю, это будет просто «добро пожаловать!:string;». это то, что ты искал? Я хочу убедиться, что добавляю в вопрос правильную информацию.
Я обновил вопрос в надежде, что он добавит то, что вы ищете.
Вы пробовали this.welcome = welcome; без Object.values()?




Я не знаю, почему вы пытаетесь сделать:
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-шаблоне.
Это работает! Спасибо! Я вообще не знаю, почему в примере кода это было вообще. Во-вторых, вы случайно не знаете, почему это сообщение не загружается при самой первой загрузке страницы? он загружает текст только после обновления.
Проверьте, есть ли какие-либо задержки в серверной части
Я полагаю, что многопоточная часть приводит к небольшой задержке? Как мне это объяснить?
Вы возвращаете arrayMessage синхронно, что означает, что ответ будет отправлен до загрузки обоих файлов свойств.
Почему вы используете
Object.values? Если это вызывается для строки, вы получите символы в виде массива.