Отправить Java arraylist в качестве параметра JavaScript

#javascript #java #jquery #json #jsp

#javascript #java #jquery #json #jsp

Вопрос:

Проблема

Я отправляю массив из StarConroller.java на страницу Star.jsp с помощью model.AddAttribute

StarConroller.java

 List<SBook> books = booksService.findAll();
model.addAttribute("books ", books);
 

Я хочу отправить этот массив книг в Star.js нажав кнопку «Показать книги» в Star.jsp

Star.jsp

 <button type="button" onclick="show(`${books}`)">Show books</button>
 

Star.js

 function show(books) {
    console.log(books);
}
 

Когда я нажимаю кнопку «Показать книги», я получаю следующее в консоли

 [SBook{SBookId=1, version=null, title='null', description='null'}, 
 SBook{SBookId=2, version=null, title='null', description='null'}, 
 SBookId{clauseId=3, version=null, title='null', description='null'}]
 

Проблема

Но мне нужен массив json

обновление 1

Класс SBook

 public class SBook{

    private Integer sBookId;
    private Integer version;
    private String title;
    private String description;

    public SBook() {
    }

    public SBook(Integer sBookId, Integer version, String title, String description) {
        this.sBookId= sBookId;
        this.version = version;
        this.title = title;
        this.description = description;
    }

    //Getter amp; Setters

    @Override
    public String toString() {
        return "SBook{"  
                "sBookId="   sBookId 
                ", version="   version  
                ", title='"   title   '''  
                ", description='"   description   '''  
                '}';
    }
}
 

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

1. Если вы можете удалить тексты sbookи sbookidиз результата ваших книг, вы можете легко использовать JSON.stringify(books)

2. @OzgurSar куда я хочу добавить JSON.stringify(книги), не могли бы вы опубликовать его в качестве ответа?

3. Извините, я тоже не заметил = символов. Они также должны быть заменены и т.д. Я думаю, это можно сделать с помощью регулярного выражения

4. @GayanSanjaya вам нужно скрыть объект JSON sbookв . поделитесь контроллером и кодом класса sbook’а.

5. @GovindaSakhare хорошо

Ответ №1:

Вы добавляете список объектов в HTTP-ответ, механизм шаблонов HTTP преобразует его в строку, используя toString метод объекта sbookобъекта. Преобразованная строка не является допустимым JSON.

Сначала вам нужно преобразовать список объектов в формат JSON, используя библиотеку синтаксического анализа (я использую библиотеку Jackson в приведенном ниже коде):

 List<SBook> books = booksService.findAll();
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(List.of(sBook));
model.addAttribute("books ", books);
 

Затем вам нужно проанализировать эту строку JSON обратно в объект javascript, используя JSON.parse :

 function show(books) {
    let parsed = JSON.parse(books);
    console.log(parsed);
}