Spring MVC 3 中的 MarshallingView

2023-12-03

当我使用 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)

文件管理.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;
    }

}

文件管理服务.java:

public interface FileManagementService {

    /**
     * Find all FileManagements.
     * @return
     */
    public List<FileManagement> findAll();
}

文件管理控制器.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:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd
                        http://www.springframework.org/schema/mvc
                        http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
                        http://www.springframework.org/schema/oxm 
                        http://www.springframework.org/schema/oxm/spring-oxm-3.1.xsd">

    <oxm:jaxb2-marshaller id="marshaller">
        <oxm:class-to-be-bound
            name="com.afirme.filemanagement.domain.FileManagement" />
    </oxm:jaxb2-marshaller>

    <context:component-scan
        base-package="com.afirme.filemanagement.controller" />

    <bean id="xmlViewResolver" class="org.springframework.web.servlet.view.XmlViewResolver"/>

    <bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp" />
      <property name="suffix" value=".jsp" />
    </bean>

    <mvc:annotation-driven/>

</beans>

/WEB-INF/views.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:oxm="http://www.springframework.org/schema/oxm"
    xsi:schemaLocation="http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <bean name="/filemanagement/list" class="org.springframework.web.servlet.view.xml.MarshallingView">
        <property name="marshaller" ref="marshaller"/>
        <property name="modelKey" value="fileManagements"/>
    </bean>

</beans>

我究竟做错了什么?


这是同样的问题1603404。它不起作用,因为 Spring 的 JAXB 编组器(Jaxb2Marshaller) 期望类上有一个 @XmlRootElement 来封送。因此可以通过添加一个中间类来表示列表来解决:

@XmlRootElement(name = "files")
public class FileManagementList {

    @XmlElement(name = "file")
    private List<FileManagement> files;

    public FileManagementList() {
        this(Collections.<FileManagement>emptyList());
    }

    public FileManagementList(List<FileManagement> files) {
        this.files = files;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring MVC 3 中的 MarshallingView 的相关文章

随机推荐

  • Visual Studio 相当于 c++11(或更低版本)中的 gcc __attribute__((unused))?

    我正在尝试编写一个宏 以便在用户需要时使用抑制未使用的变量警告 例如 在派生类中 当您尚未实现整个类时 我知道我可以删除变量名称 但为了明确起见 我更喜欢宏 到目前为止我有这个 ifdef WIN32 define UNUSED x x e
  • 在 VS2013 中使用 VS2008 (v90) C++ 工具集?

    微软文档解释如何在 VS2013 中使用 2010 或 2012 工具集 有谁知道 2008 工具集是否也有向后支持 我正在从 2008 年升级到 2013 年的几个项目 但我的团队领导希望我们最初升级项目文件 但仍以与 2008 年相同的
  • Git svn 变基失败

    I use git svn跟踪 SVN 存储库 当我尝试做一个git svn rebase我收到此错误 Incomplete data Delta source ended unexpectedly 这是一个大型仓库 具有悠久的历史 仅仅获
  • MVC4 Windows 身份验证重定向到帐户/登录

    我正在设置Windows 身份验证在 MVC 4 应用程序中使用视觉工作室2013并使用IIS Express 开发服务器 但是 我被重定向到 Account Login 就好像我正在使用表单身份验证一样 我的 bin 文件夹 或任何地方
  • 在 RECEIVE_BOOT_COMPLETED 上通过广播接收器访问数据库

    当手机完成启动后 我想根据数据库中的小时 分钟 信息自动重新注册一些警报 我尝试使用广播接收器来执行此操作 但它不起作用 当尝试在启动时访问数据库 DB 帮助程序类时 它会崩溃 通过应用程序访问数据库帮助程序类时 它工作正常 这是可能的还是
  • boost::spirit::karma 输出引号内的字符串

    我正在尝试使用 boost spirit karma 转义引号中的字符串 如果它只是一个字符串 则效果很好 但是 对于 std vector 中 boost variant 中的字符串 则不然 只是打印字符串确实有效 但是我不太明白为什么
  • 字符串有隐藏字符,无法验证,

    大约2小时前我问了一个问题 不需要看问题 只是一个参考 使用node js存储图像出现错误 给出的解决方案实际上与我的代码相同 我试图找到我的代码和他的代码之间的差异 看看他做了什么修改才能使其工作 但没有任何修改 所以我想到尝试一下在线I
  • 既然“invoke”已被软弃用,那么替代方案是什么?

    rlang invoke 现已软弃用 purrr invoke 退休了 如今 以编程方式调用带有参数列表的函数的简洁方法是什么 tldr Use exec代替invoke use map2 plus exec代替invoke map 示例i
  • UIImagePickerController 如何隐藏翻转相机按钮?

    有没有办法隐藏 UIImagePickerController 内的翻转相机按钮 谢谢阅读 我最终使用 UIImagePickerController 的自定义子类来解决此 和其他 问题 import SMImagePickerContro
  • 将包含十六进制值的字节数组转换为十进制值

    我正在 c 中进行应用程序 这里我想将包含十六进制值的字节数组转换为十进制值 假设我有一个字节数组为 array 0 0X4E array 1 0X5E array 2 0X75 array 3 0X49 在这里 我想将该十六进制数组转换为
  • random_state在train_test_split和分类器中的作用

    基于这个答案 Scikit learn 中的随机状态 伪随机数 如果我使用相同的整数 比如 42 random state 然后每次进行训练 测试分割时 它应该给出相同的分割 即每次运行期间训练中的数据实例相同 测试时的数据实例相同 But
  • XSLT根据父子元素的值删除子元素

    我正在尝试使用这里使用的一些相同的逻辑https stackoverflow com a 10629806 662877 到不同的 XML 但没有得到预期的输出 如果 TERR KHM6 则删除 剥离这两个元素创建付款项目 and 创建支付
  • 一java内存刷新易失性:一个好的程序设计?

    这是与此相关的问题 java 在一个变量上使用 易失性 VS 每个变量 我有一个或多个不同的对象 我想改变其中的某些状态 然后我想让该状态对其他线程可见 出于性能原因 我不想使该对象中的每个成员变量都是易失性的 有时我想在单线程应用程序中使
  • Spring REST 服务:从请求中检索 JSON

    我正在 Spring 3 1 上构建 REST 服务 我正在使用 EnableWebMVC 注释 由于我的服务仅接受 JSON 请求 因此我还想将传入请求转储到 MongoDB 集合中以进行日志记录 以及稍后的数据转换 我想访问原始 JSO
  • 将 Cassandra OrderedMapSerializedKey 转换为 Python 字典

    我在 Cassandra 中有一列由列表映射组成 当使用 Python 驱动程序查询时 它返回一个 OrderedMapSerializedKey 结构 该结构是列表的映射 我想将整个查询放入 pandas 中 要从 OrderedMapS
  • 是在webview已经获取文件之后调用setDownloadListener onDownloadStart吗?

    WebView 是否会执行 Http Get 并下载完整文件 然后调用我的 onDownloadStart 方法 并且我的代码再次下载文件 在 Android 应用程序中使用的 WebView 中 我们需要处理 PDF 文件的下载 我看到的
  • 无法使用特殊主体“sa”

    当我尝试运行命令时 EXEC master sp addsrvrolemember loginame N sa rolename N serveradmin GO 我收到错误 消息 15405 级别 11 状态 1 过程 sp addsrv
  • 更改 WPF 中的按钮内容

    I have private void button1 MouseEnter object sender EventArgs e for int i 0 i gt 2 i button1 Content Convert ToString i
  • 如何在ngrx效果中进行http轮询

    我有这种效果 我尝试使用计时器每 x 秒轮询一次数据 但我无法弄清楚计时器应该如何与数据流交互 我尝试在顶部添加另一个 switchMap 但随后我无法将操作和有效负载传递给第二个 switchmap 有任何想法吗 我在看这个帖子但我的情况
  • Spring MVC 3 中的 MarshallingView

    当我使用 MarshallingView 封送我的 FileManagement 对象列表 java util List 时 出现此错误 如果我只向模型添加一个对象 则不会发生这种情况 所以它使用的是对象 而不是集合 List 例外 jav