首页 > 解决方案 > 发送 Java 数组列表作为 JavaScript 参数

问题描述

问题

我通过model.addAttribute将一个数组从StarConroller.java发送到Star.jsp页面

StarConroller.java

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

我想通过单击 Star.jsp 中的“显示书籍”按钮将这一系列书籍发送到 Star.js

星号.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

S书类

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 & Setters

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

标签: javascriptjavajqueryjsonjsp

解决方案


您正在向 HTTP 响应添加对象列表,HTTP 模板引擎将使用toStringSBook 对象的方法将其转换为字符串。转换后的字符串不是有效的 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);
}

推荐阅读