You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何ObjectMapper.writeValueAsString转换QuizTable对象返回[]?

问题根源

你的QuizTable类错误地继承了ArrayList<QuizTable>,Jackson序列化时会优先将其识别为集合类型处理。而你创建的QuizTable对象里没有添加任何集合元素,所以序列化结果就是空数组[],完全忽略了类中定义的id、quizTitle等属性。

解决方案

1. 移除不必要的继承

QuizTable是单个实体类,不需要继承集合类,直接删掉extends ArrayList<QuizTable>即可。修改后的QuizTable类代码如下:

public class QuizTable {

    public String id;
    public String quizTitle;
    public String ownerId;

    public QuizTable(String id, String title, String owner) {
        this.id = id;
        this.quizTitle = title;
        this.ownerId = owner;
    }

    @JsonIgnore
    public String everything(){
        return this.id;
    }

    @JsonIgnore
    public String asJson(){
        ObjectMapper mapper = new ObjectMapper();
        try {
            return mapper.writeValueAsString(this);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getQuizTitle() {
        return quizTitle;
    }

    public void setQuizTitle(String quizTitle) {
        this.quizTitle = quizTitle;
    }

    public String getOwnerId() {
        return ownerId;
    }

    public void setOwnerId(String ownerId) {
        this.ownerId = ownerId;
    }

    @Override
    public String toString() {
        return "QuizTable{" +
                "id='" + id + '\'' +
                ", quizTitle='" + quizTitle + '\'' +
                ", ownerId='" + ownerId + '\'' +
                '}';
    }
}

2. 修正控制器代码

如果需要返回单个对象的JSON字符串,修改后的控制器方法:

@GetMapping("/getAll")
public String getAll() throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    QuizTable quiz = new QuizTable("foo", "bar", "fizz");
    String toJson = mapper.writeValueAsString(quiz);
    System.out.println(toJson);
    return toJson;
}

更简洁的方式是让Spring自动处理序列化,直接返回对象:

@GetMapping("/getAll")
public QuizTable getAll() {
    QuizTable quiz = new QuizTable("foo", "bar", "fizz");
    return quiz;
}

如果要返回多个对象组成的JSON数组,用ArrayList单独装实体即可:

@GetMapping("/getAll")
public List<QuizTable> getAll() {
    List<QuizTable> quizList = new ArrayList<>();
    quizList.add(new QuizTable("foo", "bar", "fizz"));
    quizList.add(new QuizTable("foo2", "bar2", "fizz2"));
    return quizList;
}

内容的提问来源于stack exchange,提问作者Liukaku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 21:00:22