为何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
相关产品推荐
相关产品推荐

