@ResponseBody返回List接口json

时间:2012-09-28 13:51:12

标签: json spring spring-mvc

我理解这个问题。 List是一个接口,Spring不知道要实例化什么。 一种解决方案是让我的控制器(和服务)返回一个ArrayList。我真的想避免这种情况。怎么能这样做呢?

SEVERE: Servlet.service() for servlet [Spring MVC Dispatcher Servlet] in context with path threw exception [Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: Specified class is an interface] with root cause
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: Specified class is an interface


public @ResponseBody
    List<Preference> getPreferences(@PathVariable Long userId, List<Preference> preferences, ModelMap data) {

1 个答案:

答案 0 :(得分:1)

在您尝试解决问题之前,请考虑您期望的解决方案是什么?您希望将某些对象的List编组为JSON。这个JSON应该怎么样?如果你先写测试,你会在断言中加入什么?

提示:这不是valid JSON

[1,2,3,4,5]

这两个都不是:

[{a: 1}, {b: 2}]

简而言之:你需要一个对象包装列表,既可以编组为JSON,也可以编组为XML:

{array: [1, 2, 3, 4, 5]}

话虽如此,只需将您的列表包装在一个简单的对象中:

class Wrapper {

    private List<Preference> preferences;

}

public @ResponseBody Wrapper getPreferences(/*...*/)

请注意,Wrapper类名称将被丢弃,但将使用preferences字段名称。