Spring MVC 3中的MarshallingView
当我使用MarshallingView编组FileManagement对象的列表(java.util.List)时,我收到此错误。 如果我只将一个对象添加到模型中,则不会发生这种情况。 所以它使用的是一个对象,而不是集合(List)。
例外 :
javax.servlet.ServletException: Model object [[com.afirme.filemanagement.domain.FileManagement@69c, com.afirme.filemanagement.domain.FileManagement@65f, com.afirme.filemanagement.domain.FileManagement@661, com.afirme.filemanagement.domain.FileManagement@69d, com.afirme.filemanagement.domain.FileManagement@662]] retrieved via key [fileManagements] is not supported by the Marshaller at org.springframework.web.servlet.view.xml.MarshallingView.locateToBeMarshalled(MarshallingView.java:129) at org.springframework.web.servlet.view.xml.MarshallingView.renderMergedOutputModel(MarshallingView.java:98) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1120) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:890) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:851) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:756) at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
FileManagement.java :
@XmlRootElement public class FileManagement { private Long id; private String code; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
FileManagementService.java :
public interface FileManagementService { /** * Find all FileManagements. * @return */ public List findAll(); }
FileManagementController.java :
@Controller public class FileManagementController { @RequestMapping(value="/filemanagements", method=RequestMethod.GET) public String list(Model model) { model.addAttribute("fileManagements", fileManagementService.findAll()); return LIST_VIEW; } private static final String LIST_VIEW = "/filemanagements/list" ; }
servletContext.xml:
/WEB-INF/views.xml :
我究竟做错了什么?
这与1603404的问题相同。 它不起作用,因为Spring的JAXB marshaller( Jaxb2Marshaller )希望类上的@XmlRootElement能够编组。 因此可以通过添加中间类来表示列表来解决:
@XmlRootElement(name = "files") public class FileManagementList { @XmlElement(name = "file") private List files; public FileManagementList() { this(Collections. emptyList()); } public FileManagementList(List files) { this.files = files; } }
- 如何确保方法只被多个线程调用一次?
- 在jira中使用jaxb api失败的java类:提供者com.sun.xml.bind.v2.ContextFactory未找到
- generics的解释<T extends Comparable > in collection.sort /可比代码?
- 如何从List 获取IntStream?
- 如何从Eclipse运行Javah
- 使用SpringMVC表单:选择将逗号分隔值绑定到多个下拉列表
- 限制JavaFX TextField的字符数会导致撤消时出现IndexOutOfBounds
- 如何让Ant在javac中使用JAXB 2.2.x而不是Java 6 SE JAXB类?
- 使用apache commons配置XMLConfiguration格式化XML输出