我理解这个问题。 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) {
答案 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
字段名称。